• ORM组件 ELinq (五)映射配置之XML


    ORM组件 ELinq (五) -映射配置之XML

    上节介绍了基于FluentAPI的映射配置方式,本节我们将亲自动手,一步一步搭建ELinq的XML映射程序来。备注我使用的开发环境:VS2010,Nuget 包管理器,SqlCe3.5

    1.获取ELinq

    从Nuget 控制台下载安装ELinq:install-package ELinq,安装成功后,VS的项目就自动引用了ELinq.dll,并且自动添加了ELinq.xsd (xml mapping 的Schema 文件)、Northwind.cs和Northwind.Mapping.xml 等Demo文件,由于第一次使用,所以把Northwind.cs和Northwind.Mapping.xml这两个文件先删掉。

    2. 建数据库

     打开SqlCe3.5 数据库,建立客户表:Customer ,过程略

    3. 创建和设计持久化类

    3-1创建和设计持久化类

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace XMLMappingDemo.PO
    {
        public class Customer
        {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    }

    3-2 编写XML映射文件  

    提示:要为ELinq的XML映射配置添加智能提示功能,需要把ELinq.xsd 文件复制到X:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas目录即可

    ELinq.Xsd 定义了Mapping、Table、Id、Column、ComputedColumn、Association、Version等映射元素

    创建Customer.Mapping.xml,并输入如下内容

    4. 创建和设计DbContext

    4-1 创建DbConfiguration

     注意:需要设置Customer.mapping.xml 文件的"Build Action"属性为:null,"Copy To Output Directory"属性为:Always

    4-2 创建DbContext

        class DemoContext:DbContext
        {
            static DbConfiguration configuration = DbConfiguration.ConfigureSqlCe35("Db.sdf")
                .SetSqlLogger(() => new SqlLog(Console.Out))
                .AddFile(@"Mappings\Customer.mapping.xml")
                ;
    
            public DemoContext() : base(configuration) { }
    
            public IDbSet<Customer> Customers { get; set; }
        }

    5. 测试

    5.1 清空记录

    在进行测试前,先删除所有记录,并检查表中的记录一定为0

            [Test]
            public void ClearAll()
            {
                using (var db = new DemoContext())
                {
                    db.Customers.Delete(p => true);
                    Assert.AreEqual(0, db.Customers.Count());
                }
            }

    下面是输出的SQL语句

    DELETE FROM [Customer]
    WHERE  1=1 
    
    SELECT COUNT(*)
    FROM [Customer] AS t0

    5-2 添加记录

    添加一条记录,并检查客户Id已经自动返回

    //插入
    var customer = new Customer { FirstName = "风云", LastName = "" };
    Assert.AreEqual(0, customer.Id);
    db.Customers.Insert(customer);
    Assert.IsTrue(customer.Id > 0);

    SQL输出

    INSERT INTO [Customer]([FirstName], [LastName])
    VALUES (@p0, @p1)
    -- p0:(DbType = String,Value = 风云)
    -- p1:(DbType = String,Value = 王)
    
    SELECT @@IDENTITY AS [Id]

     5-3 查询记录

    为了确保上一步已经插入到数据库中,这一步做一个查询检查,把查询结果转换成DataTable并输出数据

                    //查询
                    var items = from c in db.Customers
                                where c.FirstName == "风云"
                                select c;
    
                    var tb = Mapper.Map<IQueryable<Customer>, DataTable>(items);
    
                    tb.WriteXml(Console.Out);

     SQL输出

    SELECT t0.[Id], t0.[FirstName], t0.[LastName]
    FROM [Customer] AS t0
    WHERE (t0.[FirstName] = @p0)
    -- p0:(DbType = String,Value = 风云)
    
    <DocumentElement>
      <Customer>
        <Id>9</Id>
        <FirstName>风云</FirstName>
        <LastName></LastName>
      </Customer>
    </DocumentElement>

    5-4 更新记录

    customer.LastName = "dd";
    var effectedRow = db.Customers.Update(customer);
     Assert.AreEqual(1, effectedRow);

    SQL输出

    UPDATE [Customer]
    SET [FirstName] = @p0, [LastName] = @p1
    WHERE (([Id]=9))
    -- p0:(DbType = String,Value = 风云)
    -- p1:(DbType = String,Value = dd)
    5-5 查询记录

    为了确保上一步已经更新到数据库中,这一步做一个查询检查,把查询结果转换成DataTable并输出数据

    //查询
    items = from c in db.Customers
            where c.FirstName == "风云"
            select c;
    
     tb = Mapper.Map<IQueryable<Customer>, DataTable>(items);
    
     tb.WriteXml(Console.Out);

     SQL输出

    SELECT t0.[Id], t0.[FirstName], t0.[LastName]
    FROM [Customer] AS t0
    WHERE (t0.[FirstName] = @p0)
    -- p0:(DbType = String,Value = 风云)
    
    <DocumentElement>
      <Customer>
        <Id>9</Id>
        <FirstName>风云</FirstName>
        <LastName>dd</LastName>
      </Customer>
    </DocumentElement>

    5-6 删除记录

    db.Customers.Delete(p => p.Id == customer.Id);
    Assert.AreEqual(0, db.Customers.Count());

    SQL输出

    DELETE FROM [Customer]
    WHERE (([Id]=9))
    
    SELECT COUNT(*)
    FROM [Customer] AS t0

    结语

    在这篇文章中,我们使用ELinq来构建了一个最基本的项目,没有体现ELinq更多细节,只描绘了ELinq的Xml映射的以及单表的CRUD操作。当然使用ELinq有各种各样的程序架构,本系列未做处理,更多实战知识以后介绍,下一节将介绍基于约定的方式进行映射配置。

    技术支持:

    1. 官方网站
    2. Nuge 下载页面
    3. ORM组件 ELinq系列
    4. ORM组件 ELinq 更新日志
    5. ORM组件 ELinq 使用答疑
    6. 在我的博客留言,我会尽可能地抽时间来答复大家的问题。
    7. 加入 ELinq用户的 QQ群(271342583)。

       谢谢大家的阅读,麻烦大伙点一下推荐,再次谢谢大家。 ^_^

  • 相关阅读:
    改进的二分查找
    关于Java并发编程的总结和思考
    java异常捕获案例,此题的出处是《Java编程思想》一书
    一道关于int和Integer的面试题
    看《韩顺平Java》视频的笔记
    spring task 定时任务执行两次
    记录
    Java基础面试题
    TeamViewer修改绑定设备
    jqGrid常用操作
  • 原文地址:https://www.cnblogs.com/netcasewqs/p/2841985.html
Copyright © 2020-2023  润新知