代码改变世界

Linq学习之路(01) - 实体类与数据表的映射(Entity Class Mapping To The Relation Database Tables)

2013-05-08 22:56  ARMdong  阅读(1431)  评论(5编辑  收藏  举报

  这篇文章主要描述如何将一个关系型数据库中的表映射到具体的实体类中;也是本人在Linq学习之路上的一点总结,本篇文章是本人对Linq学习总结的第一篇文章,也是对自己学习的一个肯定,现将心得分享给大家,由于文采不佳,大家凑合看吧!

  Linq非常强大,至于为什么非常强大,建议大家去MSDN上面查找Linq的相关介绍;开门见山,也就不对Linq做太多介绍了,假设大家看到这篇文章的时候都知道Linq的重要性了,Entity Mapping To The Relation Database Tables 是Linq To SQL方面的技术,Linq主要的方向有Linq To Object、Linq To Xml、Linq To SQL、Linq To Entities...(哈哈,又对Linq做介绍了,好吧,不罗嗦了,现在开始进行如何对实体类和关系型数据库中的表做映射)

  1、首先,我们在工程中要引入System.Data.Linq程序集,在新创建的项目中默认并没有把该命名空间导入到我们的项目中,所以我们要做的第一件事就是在项目的Reference中导入System.Data.Linq.Mapping命名空间,具体操作是:鼠标右击Reference ->

选择Add Reference ->到.Net栏目中找到System.Data.Linq ->添加 -> 保存,Ok;

贴图:

step1:

 

step2:

step3:

 

  2、好了,添加完了以后,我们创建一个Customer类,属性按照数据库中的Customers表字段一致;(我这里用的是Northwind数据库,网上提供下载的),引入System.Data.Linq.Mapping 命名空间,编写属性,代码如下:

 1   [Table(Name = "Customers")]
 2     class Customer
 3     {
 4         [Column(Name = "CustomerID", IsPrimaryKey = true)]
 5         public string ID { get; set; }
 6 
 7         [Column(Name = "CompanyName")]
 8         public string CompanyName { get; set; }
 9 
10         [Column(Name = "ContactName")]
11         public string ContactName { get; set; }
12 
13         [Column(Name = "ContactTitle")]
14         public string ContactTitle { get; set; }
15 
16         [Column(Name = "Address")]
17         public string Address { get; set; }
18 
19         [Column(Name = "City")]
20         public string City { get; set; }
21 
22         [Column(Name = "Region")]
23         public string Region { get; set; }
24 
25         [Column(Name = "PostalCode")]
26         public string PostalCode { get; set; }
27 
28         [Column(Name = "Country")]
29         public string Country { get; set; }
30 
31         [Column(Name = "Phone")]
32         public string Phone { get; set; }
33 
34         [Column(Name = "Fax")]
35         public string Fax { get; set; }
36     }

 

  这里我们给Class打上了一个Table标签,说明该实体类在数据库中映射的是一个具体的表;每个属性上面都打上了Column标签,说明该属性对应表中的字段;Name表述的意思是在数据库中该表或字段的真实名字,在创建实体类的时候,我们可以自定义属性的名字,不一定非要按数据库表中的字段给它命名,只要给它指定对应的字段名称即可,例如我这里的ID属性;还有一点就是在ID属性中我们还打上了IsPrimaryKey=true的说明,说明在数据表中该列是主键;


  3、好,实体类写好了,下面我们就要创建DataContext对象了:DataContext对象才是在Mapping中的主角,他指定了我们的实体类与哪个数据库进行映射:(不废话,上代码。。。)

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //create a connection
 6             string connstr = "server=(local);database=northwind;uid=sa;pwd=sasasa";
 7             SqlConnection conn = new SqlConnection(connstr);
 8 
 9             //add the connect to create a datacontext
10             DataContext db = new DataContext(conn);
11 
12             var customers = from customer in db.GetTable<Customer>()
13                             where customer.City == "London"
14                             select customer;
15 
16             foreach (var customer in customers)
17             {
18                 Console.WriteLine("Name is:" + customer.ContactName);
19             }
20             //ok
21 
22             Console.ReadKey();
23         }

  在这个环节中,我们主要干三件事,第一件事就是创建一个connection,我们这里用到的事SQLServer数据库,所以我创建的是一个SqlConnection(其他的数据库我也不会,呵呵呵。。。);第二件事就是new一个DataContext对象,把刚刚创建的connection对象传进去,其实DataContext还有几个重载的构造函数,大家可以到MSDN中看看其他的构造函数;接下来就是就是激动人心的时刻了,万事俱备,只欠东风。。。第三步,利用DataContext对象对数据进行查询了,这里我只贴出Select,还有CUD大家可以自己试试,看看DataContext提供的方法和属性,我这里利用Linq查找城市为“London”的所有客户信息;

来来来,看热闹,看看运行结果是啥?

哈哈,是不是很神奇,有木有...

 

好了,这篇文章就讲到这里了,后面我还会给出Linq To Object、Linq To Xml、Linq To SQL的相关内容,Linq To Entities我会放到EF中介绍,大家一起开始Linq之旅吧!!!最后介绍一本很好Linq的学习资料,“Linq In Action”、可以在网上进行下载,有需要的同学可以联系我,我们有一个QQ群,聊些.net方面的技术的:159227188  我在里面的名字是   上海-Michael  欢迎加入!!!