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)。

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

posted @ 2013-01-02 16:51  风云  阅读(2586)  评论(5编辑  收藏  举报