在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