买了一本asp.net mvc 企业级实战的书籍,最近在学习Entity Framework,写个博客记录一下
根据书上例子的进行练习
下面是书上提供的数据库文件
USE [Northwind] GO /****** Object: Table [dbo].[Suppliers] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Suppliers]( [SupplierID] [int] IDENTITY(1,1) NOT NULL, [CompanyName] [nvarchar](40) NOT NULL, [ContactName] [nvarchar](30) NULL, [ContactTitle] [nvarchar](30) NULL, [Address] [nvarchar](60) NULL, [City] [nvarchar](15) NULL, [Region] [nvarchar](15) NULL, [PostalCode] [nvarchar](10) NULL, [Country] [nvarchar](15) NULL, [Phone] [nvarchar](24) NULL, [Fax] [nvarchar](24) NULL, [HomePage] [ntext] NULL, CONSTRAINT [PK_Suppliers] PRIMARY KEY CLUSTERED ( [SupplierID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: Table [dbo].[Shippers] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Shippers]( [ShipperID] [int] IDENTITY(1,1) NOT NULL, [CompanyName] [nvarchar](40) NOT NULL, [Phone] [nvarchar](24) NULL, CONSTRAINT [PK_Shippers] PRIMARY KEY CLUSTERED ( [ShipperID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Region] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Region]( [RegionID] [int] NOT NULL, [RegionDescription] [nchar](50) NOT NULL, CONSTRAINT [PK_Region] PRIMARY KEY NONCLUSTERED ( [RegionID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Employees] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Employees]( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [LastName] [nvarchar](20) NOT NULL, [FirstName] [nvarchar](10) NOT NULL, [Title] [nvarchar](30) NULL, [TitleOfCourtesy] [nvarchar](25) NULL, [BirthDate] [datetime] NULL, [HireDate] [datetime] NULL, [Address] [nvarchar](60) NULL, [City] [nvarchar](15) NULL, [Region] [nvarchar](15) NULL, [PostalCode] [nvarchar](10) NULL, [Country] [nvarchar](15) NULL, [HomePhone] [nvarchar](24) NULL, [Extension] [nvarchar](4) NULL, [Photo] [image] NULL, [Notes] [ntext] NULL, [ReportsTo] [int] NULL, [PhotoPath] [nvarchar](255) NULL, CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED ( [EmployeeID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: Table [dbo].[Customers] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Customers]( [CustomerID] [nchar](5) NOT NULL, [CompanyName] [nvarchar](40) NOT NULL, [ContactName] [nvarchar](30) NULL, [ContactTitle] [nvarchar](30) NULL, [Address] [nvarchar](60) NULL, [City] [nvarchar](15) NULL, [Region] [nvarchar](15) NULL, [PostalCode] [nvarchar](10) NULL, [Country] [nvarchar](15) NULL, [Phone] [nvarchar](24) NULL, [Fax] [nvarchar](24) NULL, CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED ( [CustomerID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[CustomerDemographics] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[CustomerDemographics]( [CustomerTypeID] [nchar](10) NOT NULL, [CustomerDesc] [ntext] NULL, CONSTRAINT [PK_CustomerDemographics] PRIMARY KEY NONCLUSTERED ( [CustomerTypeID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: Table [dbo].[Categories] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Categories]( [CategoryID] [int] IDENTITY(1,1) NOT NULL, [CategoryName] [nvarchar](15) NOT NULL, [Description] [ntext] NULL, [Picture] [image] NULL, CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED ( [CategoryID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: Table [dbo].[Territories] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Territories]( [TerritoryID] [nvarchar](20) NOT NULL, [TerritoryDescription] [nchar](50) NOT NULL, [RegionID] [int] NOT NULL, CONSTRAINT [PK_Territories] PRIMARY KEY NONCLUSTERED ( [TerritoryID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[CustomerCustomerDemo] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[CustomerCustomerDemo]( [CustomerID] [nchar](5) NOT NULL, [CustomerTypeID] [nchar](10) NOT NULL, CONSTRAINT [PK_CustomerCustomerDemo] PRIMARY KEY NONCLUSTERED ( [CustomerID] ASC, [CustomerTypeID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Products] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Products]( [ProductID] [int] IDENTITY(1,1) NOT NULL, [ProductName] [nvarchar](40) NOT NULL, [SupplierID] [int] NULL, [CategoryID] [int] NULL, [QuantityPerUnit] [nvarchar](20) NULL, [UnitPrice] [money] NULL, [UnitsInStock] [smallint] NULL, [UnitsOnOrder] [smallint] NULL, [ReorderLevel] [smallint] NULL, [Discontinued] [bit] NOT NULL, CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED ( [ProductID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Orders] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Orders]( [OrderID] [int] IDENTITY(1,1) NOT NULL, [CustomerID] [nchar](5) NULL, [EmployeeID] [int] NULL, [OrderDate] [datetime] NULL, [RequiredDate] [datetime] NULL, [ShippedDate] [datetime] NULL, [ShipVia] [int] NULL, [Freight] [money] NULL, [ShipName] [nvarchar](40) NULL, [ShipAddress] [nvarchar](60) NULL, [ShipCity] [nvarchar](15) NULL, [ShipRegion] [nvarchar](15) NULL, [ShipPostalCode] [nvarchar](10) NULL, [ShipCountry] [nvarchar](15) NULL, CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED ( [OrderID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[Order Details] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Order Details]( [OrderID] [int] NOT NULL, [ProductID] [int] NOT NULL, [UnitPrice] [money] NOT NULL, [Quantity] [smallint] NOT NULL, [Discount] [real] NOT NULL, CONSTRAINT [PK_Order_Details] PRIMARY KEY CLUSTERED ( [OrderID] ASC, [ProductID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Table [dbo].[EmployeeTerritories] Script Date: 03/21/2019 21:18:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[EmployeeTerritories]( [EmployeeID] [int] NOT NULL, [TerritoryID] [nvarchar](20) NOT NULL, CONSTRAINT [PK_EmployeeTerritories] PRIMARY KEY NONCLUSTERED ( [EmployeeID] ASC, [TerritoryID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: Default [DF_Order_Details_UnitPrice] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] ADD CONSTRAINT [DF_Order_Details_UnitPrice] DEFAULT (0) FOR [UnitPrice] GO /****** Object: Default [DF_Order_Details_Quantity] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] ADD CONSTRAINT [DF_Order_Details_Quantity] DEFAULT (1) FOR [Quantity] GO /****** Object: Default [DF_Order_Details_Discount] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] ADD CONSTRAINT [DF_Order_Details_Discount] DEFAULT (0) FOR [Discount] GO /****** Object: Default [DF_Orders_Freight] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Orders] ADD CONSTRAINT [DF_Orders_Freight] DEFAULT (0) FOR [Freight] GO /****** Object: Default [DF_Products_UnitPrice] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] ADD CONSTRAINT [DF_Products_UnitPrice] DEFAULT (0) FOR [UnitPrice] GO /****** Object: Default [DF_Products_UnitsInStock] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] ADD CONSTRAINT [DF_Products_UnitsInStock] DEFAULT (0) FOR [UnitsInStock] GO /****** Object: Default [DF_Products_UnitsOnOrder] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] ADD CONSTRAINT [DF_Products_UnitsOnOrder] DEFAULT (0) FOR [UnitsOnOrder] GO /****** Object: Default [DF_Products_ReorderLevel] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] ADD CONSTRAINT [DF_Products_ReorderLevel] DEFAULT (0) FOR [ReorderLevel] GO /****** Object: Default [DF_Products_Discontinued] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] ADD CONSTRAINT [DF_Products_Discontinued] DEFAULT (0) FOR [Discontinued] GO /****** Object: Check [CK_Birthdate] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD CONSTRAINT [CK_Birthdate] CHECK (([BirthDate] < getdate())) GO ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [CK_Birthdate] GO /****** Object: Check [CK_Discount] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] WITH NOCHECK ADD CONSTRAINT [CK_Discount] CHECK (([Discount] >= 0 and [Discount] <= 1)) GO ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [CK_Discount] GO /****** Object: Check [CK_Quantity] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] WITH NOCHECK ADD CONSTRAINT [CK_Quantity] CHECK (([Quantity] > 0)) GO ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [CK_Quantity] GO /****** Object: Check [CK_UnitPrice] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] WITH NOCHECK ADD CONSTRAINT [CK_UnitPrice] CHECK (([UnitPrice] >= 0)) GO ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [CK_UnitPrice] GO /****** Object: Check [CK_Products_UnitPrice] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [CK_Products_UnitPrice] CHECK (([UnitPrice] >= 0)) GO ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_Products_UnitPrice] GO /****** Object: Check [CK_ReorderLevel] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [CK_ReorderLevel] CHECK (([ReorderLevel] >= 0)) GO ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_ReorderLevel] GO /****** Object: Check [CK_UnitsInStock] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [CK_UnitsInStock] CHECK (([UnitsInStock] >= 0)) GO ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_UnitsInStock] GO /****** Object: Check [CK_UnitsOnOrder] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [CK_UnitsOnOrder] CHECK (([UnitsOnOrder] >= 0)) GO ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [CK_UnitsOnOrder] GO /****** Object: ForeignKey [FK_CustomerCustomerDemo] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[CustomerCustomerDemo] WITH CHECK ADD CONSTRAINT [FK_CustomerCustomerDemo] FOREIGN KEY([CustomerTypeID]) REFERENCES [dbo].[CustomerDemographics] ([CustomerTypeID]) GO ALTER TABLE [dbo].[CustomerCustomerDemo] CHECK CONSTRAINT [FK_CustomerCustomerDemo] GO /****** Object: ForeignKey [FK_CustomerCustomerDemo_Customers] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[CustomerCustomerDemo] WITH CHECK ADD CONSTRAINT [FK_CustomerCustomerDemo_Customers] FOREIGN KEY([CustomerID]) REFERENCES [dbo].[Customers] ([CustomerID]) GO ALTER TABLE [dbo].[CustomerCustomerDemo] CHECK CONSTRAINT [FK_CustomerCustomerDemo_Customers] GO /****** Object: ForeignKey [FK_Employees_Employees] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD CONSTRAINT [FK_Employees_Employees] FOREIGN KEY([ReportsTo]) REFERENCES [dbo].[Employees] ([EmployeeID]) GO ALTER TABLE [dbo].[Employees] CHECK CONSTRAINT [FK_Employees_Employees] GO /****** Object: ForeignKey [FK_EmployeeTerritories_Employees] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[EmployeeTerritories] WITH CHECK ADD CONSTRAINT [FK_EmployeeTerritories_Employees] FOREIGN KEY([EmployeeID]) REFERENCES [dbo].[Employees] ([EmployeeID]) GO ALTER TABLE [dbo].[EmployeeTerritories] CHECK CONSTRAINT [FK_EmployeeTerritories_Employees] GO /****** Object: ForeignKey [FK_EmployeeTerritories_Territories] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[EmployeeTerritories] WITH CHECK ADD CONSTRAINT [FK_EmployeeTerritories_Territories] FOREIGN KEY([TerritoryID]) REFERENCES [dbo].[Territories] ([TerritoryID]) GO ALTER TABLE [dbo].[EmployeeTerritories] CHECK CONSTRAINT [FK_EmployeeTerritories_Territories] GO /****** Object: ForeignKey [FK_Order_Details_Orders] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] WITH NOCHECK ADD CONSTRAINT [FK_Order_Details_Orders] FOREIGN KEY([OrderID]) REFERENCES [dbo].[Orders] ([OrderID]) GO ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [FK_Order_Details_Orders] GO /****** Object: ForeignKey [FK_Order_Details_Products] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Order Details] WITH NOCHECK ADD CONSTRAINT [FK_Order_Details_Products] FOREIGN KEY([ProductID]) REFERENCES [dbo].[Products] ([ProductID]) GO ALTER TABLE [dbo].[Order Details] CHECK CONSTRAINT [FK_Order_Details_Products] GO /****** Object: ForeignKey [FK_Orders_Customers] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD CONSTRAINT [FK_Orders_Customers] FOREIGN KEY([CustomerID]) REFERENCES [dbo].[Customers] ([CustomerID]) GO ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Customers] GO /****** Object: ForeignKey [FK_Orders_Employees] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD CONSTRAINT [FK_Orders_Employees] FOREIGN KEY([EmployeeID]) REFERENCES [dbo].[Employees] ([EmployeeID]) GO ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Employees] GO /****** Object: ForeignKey [FK_Orders_Shippers] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Orders] WITH NOCHECK ADD CONSTRAINT [FK_Orders_Shippers] FOREIGN KEY([ShipVia]) REFERENCES [dbo].[Shippers] ([ShipperID]) GO ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Shippers] GO /****** Object: ForeignKey [FK_Products_Categories] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [FK_Products_Categories] FOREIGN KEY([CategoryID]) REFERENCES [dbo].[Categories] ([CategoryID]) GO ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [FK_Products_Categories] GO /****** Object: ForeignKey [FK_Products_Suppliers] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Products] WITH NOCHECK ADD CONSTRAINT [FK_Products_Suppliers] FOREIGN KEY([SupplierID]) REFERENCES [dbo].[Suppliers] ([SupplierID]) GO ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [FK_Products_Suppliers] GO /****** Object: ForeignKey [FK_Territories_Region] Script Date: 03/21/2019 21:18:01 ******/ ALTER TABLE [dbo].[Territories] WITH CHECK ADD CONSTRAINT [FK_Territories_Region] FOREIGN KEY([RegionID]) REFERENCES [dbo].[Region] ([RegionID]) GO ALTER TABLE [dbo].[Territories] CHECK CONSTRAINT [FK_Territories_Region] GO
这里是练习的源代码
using System; using System.Collections.Generic; using System.Data.Entity.Infrastructure; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace EFCURD { class Program { static void Main(string[] args) { using (var edm = new NorthwindEntities()) { var query = from d in edm.Order_Details join order in edm.Orders on d.OrderID equals order.OrderID select new { OrderId = order.OrderID, ProductId = d.ProductID, UnitPrice = d.UnitPrice }; Console.WriteLine(query.Count()); foreach (var q in query) { Console.WriteLine("{0},{1},{2}",q.OrderId,q.ProductId,q.UnitPrice); } } //add();//调用新增方法 //Querydelay1();//延迟加载第一种方式 //QueryDelay2();//延迟加载第二种方式 //List<Customers> list = GetListBy(u => u.CustomerID.Contains("A"), u => u.ContactName);//根据条件排序和查询 //foreach (var a in list) //{ // Console.WriteLine(a.Country); //} //List<Customers> list = GetPagedList(2, 10, u => u.CustomerID.Contains("A"), u => u.CustomerID);//调用分页方法查询 //foreach (var item in list) //{ // Console.WriteLine(item.ContactName); //} // Edit();//修改方法(先查询,在修改) //Edit2();//修改方法(创建对象,直接修改) //Delete();//删除方法 //SavaBatched();//批处理 // BatcheAdd();//批处理增加50条数据 Console.ReadKey(); } #region 新增 static int add() { using (NorthwindEntities db = new NorthwindEntities()) { Customers _Customers = new Customers() { CustomerID ="kfz", Address ="广东省****技术有限公司", City ="江门", Phone ="123456789", CompanyName="广东省****技术有限公司", ContactName="vinkong", }; //方法一 // db.Customers.Add(_Customers); //方法二 DbEntityEntry<Customers> entry = db.Entry<Customers>(_Customers); entry.State = System.Data.EntityState.Added; return db.SaveChanges(); } } #endregion //简单查询和延时加载 #region Querydelay1 static void Querydelay1() { using (NorthwindEntities db = new NorthwindEntities()){ DbQuery<Customers> dbQuery = db.Customers.Where(u => u.ContactName == "vinkong").OrderBy(u=>u.ContactName).Take(1) as DbQuery<Customers>; //获得延迟查询对象后,调用对象的获取方法,此时,就会根据之前的条件生成sql语句, //查询数据库了! Customers _Customers = dbQuery.FirstOrDefault(); Console.WriteLine(_Customers.ContactName); } } #endregion #region QueryDelay2 static void QueryDelay2() { using (NorthwindEntities db = new NorthwindEntities()){ IQueryable<Orders> _Orders = db.Orders.Where(a => a.CustomerID == "SUPRD"); //真实返回的DbQuery对象,以接口方式返回 //此时只查询了订单表 Orders order = _Orders.FirstOrDefault(); //当访问订单对象里的外键实体时,EF会查询订单对应的用户表,查询之后,再将数据装入这个实体 Console.WriteLine(order.Customers.ContactName); IQueryable<Orders> orderList = db.Orders; List<Orders> objet = db.Orders.ToList(); Console.WriteLine(objet.Count); foreach (Orders o in orderList) { Console.WriteLine(o.OrderID + ":ContactName="+ o.Customers.ContactName); } } } #endregion #region 根据条件排序和查询 static List<Customers> GetListBy<TKey>(Expression<Func<Customers,bool>> whereLambda , Expression <Func<Customers,TKey>> orderLambda) { using (NorthwindEntities db = new NorthwindEntities()){ return db.Customers.Where(whereLambda).OrderBy(orderLambda).ToList(); } } #endregion #region 分页查询 static List<Customers> GetPagedList<TKey>(int pageIndex , int pageSize, Expression <Func<Customers,bool>> whereLambda,Expression <Func<Customers,TKey>> orderBy) { using (NorthwindEntities db = new NorthwindEntities()) { //分页时一定要注意:Skip之前一定要OrderBy return db.Customers.Where(whereLambda).OrderBy(orderBy).Skip ((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } } #endregion #region 修改(官方推荐的修改方式时先查询后修改) static void Edit() { using (NorthwindEntities db = new NorthwindEntities()) { //查询出一个要修改的对象,注意:此时返回的是一个Customer类的代理对象 Customers _customers = db.Customers.Where(u => u.CustomerID == "kfz").FirstOrDefault(); Console.WriteLine("修改前:"+_customers.ContactName); //修改内容--注意:此时其实操作的是代理类对象的属性,这些属性会将值设置给内部的 //Customers对象对应的属性,同时标记此属性为已修改状态 _customers.ContactName = "你的世界"; //重新保存到数据库==注意:此时EF上下文会检查容器内部所有的对象,先找到标记为修改的对象 //然后找到标记为修改的对象属性,生成对应的update语句执行 db.SaveChanges(); Console.WriteLine("修改成功:"); Console.WriteLine(_customers.ContactName); } } #endregion #region 优化的修改方式(创建对象,直接修改) static void Edit2() { //查询出一个要修改的对象 Customers _Customers = new Customers() { CustomerID ="kfz", Address ="江门市江海区", City ="江门", Phone ="18702604882", CompanyName="江门****有限公司", ContactName="日出日落" }; using (NorthwindEntities db = new NorthwindEntities()) { DbEntityEntry<Customers> entry = db.Entry<Customers>(_Customers); entry.State = System.Data.EntityState.Unchanged; entry.Property("Phone").IsModified = true; db.SaveChanges(); Console.WriteLine("修改成功:"); Console.WriteLine(_Customers.ContactName); } } #endregion #region 删除 static void Delete() { using(NorthwindEntities db = new NorthwindEntities()){ //1.创建要删除的对象 Customers u = new Customers() { CustomerID = "kfz" }; //附加到EF中 db.Customers.Attach(u); //标记为删除--注意:此方法就是标记当前对象为删除状态 db.Customers.Remove(u); /* 也可以使用Entry来附加和修改 DbEntityEntry<Customers> entry = db.Entry<Customers>(u); entry.State = System.Data.EntityState.Deleted; */ //执行删除SQL db.SaveChanges(); Console.WriteLine("删除成功!"); } } #endregion #region 批处理 static void SavaBatched() { Customers _Customers = new Customers { CustomerID = "13", Address = "北京路", City = "北京", Phone = "1870264882", CompanyName = "***技术有限公司", ContactName = "疯子中" }; using (NorthwindEntities db = new NorthwindEntities()) { db.Customers.Add(_Customers); Customers _Customers2 = new Customers { CustomerID = "15", Address = "南京路", City = "南京", Phone = "18702604883", CompanyName = "****责任有限公司", ContactName = "疯子凯" }; db.Customers.Add(_Customers2); //修改数据 Customers usr = new Customers() { CustomerID = "kfz", ContactName = "回忆杀", CompanyName = "广东****公司xxff" }; DbEntityEntry<Customers> entry = db.Entry<Customers>(usr); entry.State = System.Data.EntityState.Unchanged; entry.Property("CompanyName").IsModified = true; //删除数据 Customers u = new Customers() { CustomerID = "zfk" }; ////附加到EF中 db.Customers.Attach(u); ////标记为删除--注意:此方法就是标记当前对象为删除状态 db.Customers.Remove(u); db.SaveChanges(); Console.WriteLine("批处理 完成~~~~~~~~!"); } } #endregion #region 批处理--一次新增50条数据 static void BatcheAdd() { using (NorthwindEntities db = new NorthwindEntities()) { for (int i = 0; i < 50; i++) { Customers _Customers = new Customers { CustomerID ="kz"+i, Address ="德式街区", City="德式", Phone="18702604883", CompanyName="工商", ContactName="kfz"+i, }; db.Customers.Add(_Customers); } db.SaveChanges(); } } #endregion } }