指引网

当前位置: 主页 > 编程开发 > .NET >

用LINQtoSQL创建Web应用系统(二)

来源:网络 作者:佚名 点击: 时间:2017-11-17 03:45
[摘要] LINQ to SQL LINQ to SQL 提供了访问数据库的方法,且允许我们做所有数据库相关的操作,如查询、插入、更新和删除。LINQ to SQL消除了写存储过程和从数据访问层调用的过程,它可以在运行的时候自

        LINQ to SQL

        LINQ to SQL 提供了访问数据库的方法,且允许我们做所有数据库相关的操作,如查询、插入、更新和删除。LINQ to SQL消除了写存储过程和从数据访问层调用的过程,它可以在运行的时候自动生成合适的SQL脚本来进行数据库操作。在Visual studio中,你可以通过使用Add New Item 增加LINQ to SQL文件到项目中。下图1.4是Northwind数据库在Object Relational Designer 中的显示(EntLib.com 开源小组注:原文采用SampleDB数据库,这里我们采用Northwind 范例数据库)。当保存该文件时,LINQ to SQL自动创建一个CS文件或VB文件 – 用来访问数据库的DataContext类,还为设计器中的表创建一些必要的实体类。在设计器中的每一个表均有一个对应的实体类。

        设计器中的表包含所有的数据库属性,包括表关系。设计器中的箭头标识表示数据库表的主键/外键关系。

        EntLib.com 开源小组注:这里我们创建C# 项目,而不是原文采用的VB项目,因此后续的示例代码全部为C#,原文为VB代码。

        DataContext 类

        Solution 中的每一个LINQ to SQL设计器将自动创建一个DataContext类,用来查询数据库、检索数据记录和更新数据库操作的主要类,它包含了每一个表的属性。

        实体类

        LINQ to SQL为添加到设计器(.dbml文件)中的每一个表创建对应的实体类,这些实体类包含了强类型属性集合,映射到数据库中对应表的字段。LINQ to SQL使用这些实体类来生成数据操作的SQL脚本,同时,我们也可以创建实体类的实例,给实例赋值,然后在不同的层之间作为数据传输对象进行传递。(EntLib.com 开源小组注:这些实体类并不适合在WCF Service与Client 作为DTO传递,因为WCF对传输的实体类有特殊的attribute要求。对WCF Data Contract的要求,请您参加相关的文档。)

        映射Mapping

        DataContext类中的实体类和属性直接映射到对应数据表和字段。缺省情况下,在DataContext类中,LINQ使用继承抽象类MappingSource的AttributedMappingSource类来存放表和字段的映射信息,从数据库中检索记录和提交数据更新到数据库时需要这些映射信息。

        重新生成DataContext类

        当数据库表设计发生变化时,必须更新DataContext类。我们建议在任何修改/更新数据表时,重新生成整个DataContext类。首先,删除DataContext 类文件(C# / VB文件);然后保存该文件,并自动DataContext类。或者你右键点击.dbml文件,找到Run Custom Tool 选项,然后点击重新生成DataContext类文件。

        创建Data Linq 层

        下图1.2显示Data Linq层,包含了DataContext类和实体类。这些类对应的代码文件由Visual studio自动生成。       

        图1.2:Data Linq 层 – 详细视图

------分隔线----------------------------