(016):[演练]创建简单对象模型和LINQ查询(C#)

来源:互联网 发布:淘宝店铺怎么刷钻 编辑:程序博客网 时间:2024/06/07 20:49


视频演示:http://u.115.com/file/f2e3bc874c

本演练提供了复杂性最低的基本端对端 LINQ to SQL 方案。您将创建一个可为示例 Northwind 数据库中的 Customers 表建模的实体类。 然后您将创建一个简单查询,用于列出位于伦敦的客户。
本演练在设计上是面向代码的,以帮助说明 LINQ to SQL 概念。 一般来说,您会使用对象关系设计器来创建对象模型。 有关更多信息,请参见对象关系设计器(O/R 设计器)。


创建LINQ to SQL解决方案
此任务为第一项任务,在此任务中,您要创建一个 Visual Studio 解决方案,此解决方案包含生成和运行 LINQ to SQL 项目所必需的引用。
1、在 Visual Studio 的“文件”菜单上指向“新建”,然后单击“项目”。
2、在“新建项目”对话框的“项目类型”窗格中,单击“Visual C#”。
3、在“模板”窗格中,单击“控制台应用程序”。
4、在“名称”框中,键入 LinqConsoleApp。
5、在“位置”框中,确认要用于存储项目文件的位置。
6、单击“确定”。

添加LINQ引用和指令
本演练用到默认情况下您的项目中可能未安装的程序集。 如果在您的项目中未将 System.Data.Linq 作为引用列出(在“解决方案资源管理器”中展开“引用”节点),请按照以下步骤中的说明添加它。
1、在“解决方案资源管理器”中,右击“引用”,然后单击“添加引用”。
2、在“添加引用”对话框中,依次单击“.NET”、System.Data.Linq 程序集和“确定”。
此程序集即被添加到项目中。
3、在“Program.cs”的顶部添加以下指令:

using System.Data.Linq;using System.Data.Linq.Mapping;

将类映射到数据库表
在此步骤中,您将创建一个类,并将其映射到数据库表。 这样的类称为“实体类”。 请注意,只需添加 TableAttribute 属性即可完成映射。 Name 属性指定数据库中的表的名称。
将下面的代码键入或粘贴到 Program.cs 中紧靠在 Program 类声明上方的位置:

[Table(Name = "Customers")]public class Customer{}

在类中指定用于表示数据库列的属性
在此步骤中,您要完成几项任务。
您要使用 ColumnAttribute 属性 (Attribute) 指定实体类中的 CustomerID 和 City 属性 (Property) 表示数据库表中的列。
您要指定 CustomerID 属性表示数据库中的主键列。
您要指定 _CustomerID 和 _City 字段用作私有存储字段。 然后,LINQ to SQL 就可以直接存储和检索值,而不用使用可能包含业务逻辑的公共访问器。

表示两个数据库列的特性
将下面的代码键入或粘贴到 Program.cs 中 Customer 类的大括号内。

private string _CustomerID;[Column(IsPrimaryKey = true, Storage = "_CustomerID")]public string CustomerID{    get    {        return this._CustomerID;    }    set    {        this._CustomerID = value;    }}private string _City;[Column(Storage = "_City")]public string City{    get    {        return this._City;    }    set    {        this._City = value;    }}

指定与Northwind数据库的连接
在此步骤中,使用 DataContext 对象在基于代码的数据结构与数据库本身之间建立连接。 DataContext 是您从数据库中检索对象和提交更改的主要通道。
您还可以针对数据库中的 Customers 表声明 Table<Customer> 作为查询的类型化逻辑表。 您将在后续步骤中创建和执行这些查询。
将下面的代码键入或粘贴到 Main 方法中。
请注意,假定 Northwind.mdf 文件位于 linqtest5 文件夹中。

// Use a connection string.DataContext db = new DataContext(@"C:/linqtest5/Northwind.mdf");// Get a typed table to run queries.Table<Customer> Customers = db.GetTable<Customer>();

创建简单查询
在此步骤中,您将创建一个查询,查找数据库中的 Customers 表内的哪些客户位于伦敦。 此步骤中的查询代码只描述查询,它不执行查询。 这种方法称为“延迟执行 ”。 有关更多信息,请参见 LINQ 查询简介 (C#)。
您还将生成一个日志输出,显示 LINQ to SQL 生成的 SQL 命令。 此日志记录功能(使用 Log)对调试有帮助,并有助于确定发送给数据库的命令是否准确地表示您的查询。
将下面的代码键入或粘贴到 Table<Customer> 声明后面的 Main 方法中。

// Attach the log to show generated SQL.db.Log = Console.Out;// Query for customers in London.IQueryable<Customer> AllCustomers =    from Customer in Customers    where Customer.City == "London"    select Customer;

执行查询
在此步骤中,您将实际执行查询。您在前面步骤中创建的查询表达式只有在需要结果时才会进行计算。当您开始 foreach 迭代时,将会针对数据库执行 SQL 命令,并将对象具体化。
1、将下面的代码键入或粘贴到 Main 方法的末尾(在查询说明之后)。

foreach (Customer Customer in AllCustomers){    Console.WriteLine("ID={0}, City={1}",        Customer.CustomerID,        Customer.City);}// Prevent console window from closing.Console.ReadLine();

2、按 F5 调试该应用程序。
说明
如果您的应用程序产生运行时错误,请参见 通过演练学习 (LINQ to SQL) 中的“疑难解答”一节。
3、控制台窗口中的查询结果应显示如下:

SELECT [t0].[CustomerID], [t0].[City]FROM [Customers] AS [t0]WHERE [t0].[City] = @p0-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.30729.1ID=AROUT, City=LondonID=BSBEV, City=LondonID=CONSH, City=LondonID=EASTC, City=LondonID=NORTS, City=LondonID=SEVES, City=London

4、在控制台窗口中按 Enter 以关闭应用程序。

完整代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.Linq;using System.Data.Linq.Mapping;namespace Demo02{    [Table(Name = "Customers")]    public class Customer    {        private string _CustomerID;        [Column(IsPrimaryKey = true, Storage = "_CustomerID")]        public string CustomerID        {            get            {                return this._CustomerID;            }            set            {                this._CustomerID = value;            }        }        private string _City;        [Column(Storage = "_City")]        public string City        {            get            {                return this._City;            }            set            {                this._City = value;            }        }    }    class Program    {        static void Main(string[] args)        {            // Use a connection string.            DataContext db = new DataContext(@"C:/linqtest5/Northwind.mdf");            // Get a typed table to run queries.            Table<Customer> Customers = db.GetTable<Customer>();            // Attach the log to show generated SQL.            db.Log = Console.Out;            // Query for customers in London.            IQueryable<Customer> AllCustomers =                from Customer in Customers                where Customer.City == "London"                select Customer;            foreach (Customer Customer in AllCustomers)            {                Console.WriteLine("ID={0}, City={1}",                    Customer.CustomerID,                    Customer.City);            }            // Prevent console window from closing.            Console.ReadLine();        }    }}








0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕感冒了怎么办鼻塞流鼻涕 怀孕初期感冒了怎么办鼻塞流鼻涕 怀孕9个月流鼻涕怎么办 怀孕5个月流鼻涕怎么办 小孩老是流黄鼻涕口臭怎么办 狗狗有食欲流黄鼻涕拉稀怎么办 小孩流黄鼻涕咳嗽怎么办 小狗感冒了一直打喷嚏怎么办 眼干眼屎多模糊怎么办 宝宝眼睛上火眼屎多怎么办 眼睛发干眼屎多怎么办 三个月宝宝眼睛流泪有眼屎怎么办 小孩眼睛流泪有眼屎怎么办 宝宝上火眼睛有好多眼屎怎么办 宝宝眼睛流泪还有眼屎怎么办? 新生儿眼睛上火眼屎多怎么办 铁耳屎在最里面怎么办 婴儿鼻屎特别深怎么办 鼻子干呼吸就疼怎么办 儿童鼻子里总有好多鼻屎怎么办 小孩鼻子里有鼻屎呼吸不通怎么办 鼻子不通通气鼻屎粘在鼻子怎么办 鼻子里面干燥长鼻屎怎么办 鼻孔里干的难受怎么办 每天有很多鼻屎怎么办 鼻子里面干的疼怎么办 婴儿鼻屎堵住了怎么办 婴儿有很多鼻屎怎么办 隆鼻7天好多鼻屎怎么办 隆鼻第五天好多鼻屎怎么办 小孩鼻屎堵住了怎么办 风寒感冒流清鼻涕怎么办 流清鼻涕吐黄痰不发烧怎么办 宝宝流黄鼻涕发烧怎么办 感冒了浓鼻涕多怎么办 感冒流浓鼻涕怎么办速效办法 孩子一直流清水鼻涕怎么办 宝宝鼻子呼噜呼噜响怎么办 鼻涕往嗓子里流怎么办 咳嗽痰多鼻涕多怎么办 没感冒嗓子痰多鼻涕怎么办