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有各种各样的程序架构,本系列未做处理,更多实战知识以后介绍,下一节将介绍基于约定的方式进行映射配置。
技术支持:
- 官方网站
- Nuge 下载页面
- ORM组件 ELinq系列
- ORM组件 ELinq 更新日志
- ORM组件 ELinq 使用答疑
- 在我的博客留言,我会尽可能地抽时间来答复大家的问题。
- 加入 ELinq用户的 QQ群(271342583)。
谢谢大家的阅读,麻烦大伙点一下推荐,再次谢谢大家。 ^_^