• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

LINQ那些事儿(1)- 定义从关系数据库到entity class的映射

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:

 在LINQ2SQL中,所有的数据操作的入口都是DataContext对象,如下面的代码示例了访问Northwnd数据库的Customer数据:

01 class Program
02 {
03     static void Main(string[] args)
04     {
05         using(var context = CreateContext())
06         {
07             context.Log = Console.Out;
08             var customers = context.GetTable<Customer>().Take(10);
09
10             foreach (var item in customers)
11             {
12                 Console.WriteLine(item.CompanyName);
13             }
14         }
15     }
16
17     static DataContext CreateContext()
18     {
19         var path = System.IO.Path.Combine(
20              AppDomain.CurrentDomain.BaseDirectory, "northwnd.xml");
21         var connectionString = System.IO.Path.Combine(
22             AppDomain.CurrentDomain.BaseDirectory, "northwnd.mdf");
23         var mapping = XmlMappingSource.FromXml(System.IO.File.ReadAllText(path));
24         var context = new DataContext(connectionString, mapping);
25
26         return context;
27     }
28 }

更完整的通过DataContext实现SqlServer数据库的CRUD操作的方法,请参考LINQ那些事儿(2)- 简单对象的CRUD操作和Association的级联操作。 CreateContext()函数通过传递数据库mdf文件的路径和映射信息,构造了一个DataContext对象,通过DataContext对象,我们可以对该数据库进行任何的操作,包括CRUD,甚至是删除或创建一个新的数据库文件。为了便于示例,本文用了Sqlexpress的本地数据库文件,你可以修改connectionString指向正式SqlSever上的数据库。

关于DataContext的详细说明,请参考MSDN:http://msdn.microsoft.com/zh-cn/library/system.data.linq.datacontext.aspx

我们来关注传递给DataContext构造函数的第二个参数——mapping,mapping对象中包含了Northwnd数据库和实体类之间的映射关系。LINQ2SQL通过System.Data.Linq.Mapping.MappingSource来作为映射关系的基类,并且在.Net Framework 3.5中提供了AttributeMappingSource和XmlMappingSource,分别表示了两种定义映射关系的方法——通过在实体类上用Attribute标签来定义,以及通过外部Xml文件来定义映射关系。

当使用一些开源的ORM框架时,你可能不得不手写定义这些映射信息,或者通过第三方的工具来实现映射信息的生成。对于LINQ2SQL,同样可以用手写定义,但是微软已经为我们提供了足够好的生成工具——O/R Designer和SqlMetal。

 

参考资料:

基于属性的映射http://msdn.microsoft.com/zh-cn/library/bb386971.aspx

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1978130638@qq.com ,  QQ