net 4 的 entitynet framework版本 是什么版本

Current IssueReceive the MSDN Flash e-mail newsletter every other week, with news and information personalized to your interests and areas of focus.net framework 4.0 xp sp3下载站|net framework 4.0 xp sp3绿色版_microsoft net framework 4.0 download一键装机_microsoft net framework 4.exe_免费高速下载|百度云网盘-分享无限制
net framework 4.0 xp sp3绿色无毒版本
大小:1350.00MB
大小:100.00MB
大小:10.00MB
大小:100.00MB
大小:31.60MB
大小:7.00MB
大小:9.96MB
大小:10.00MB
大小:10.00MB
大小:9.99MB
大小:10.00MB
大小:31.60MB
大小:36.80MB
.net framework 4.0 xp 下载出版社:清华大学出版社
出版日期:2010年4月
ISBN:978-7-302-22190-6
价:79.00元
免责声明:图书版权归出版社和作者所有, 仅提供试读
本书详细信息
前言与目录
第1章 使用ADO.NET 3.5 提供的新方法访问数据
第5章 使用LINQ to SQL 和LinqDataSource
第8章 探索第三方和新兴的LINQ 实现
第12章 利用对象服务和LINQ to Entities
第15章 使用实体框架作为数据源
随便说两句
可以匿名发言哦!
(点击进行更换)
作译者简介
孟兆炜 译&&本书由孟兆炜译,原作者为:Roger Jennings 是一名专业的作者和顾问。他在Microsoft .NET n 层结构、客户/服务器数据库应用程序、数据密集的基于Windows 通信基础的Web 服务等方面有很深的造诣。
本作者其他图书
作者:李铭 译
&&《C#高级编程(第8版)》是C# 2012和.NET 4.5高级技术的终极资源,旨在帮助读者更新、提高用C# 2012和.NET 4.5编写Windo
相关技术专题
           
51CTO旗下网站&*&ADO.NET&Entity&Framework&4.0&-&新增了对外键的支持,即把外键当做实体的一个属性来处理
using&System.Collections.G
using&System.L
using&System.W
using&System.Web.UI;
using&System.Web.UI.WebC
namespace&DataAccess.EntityFramework.ForeignKeys
&&&&public&partial&class&Demo&:&System.Web.UI.Page
&&&&&&&&private&Random&_random&=&new&Random();
&&&&&&&&protected&void&Page_Load(object&sender,&EventArgs&e)
&&&&&&&&&&&&//&在一个已存在的产品类别下新建一个产品(通过外键值)
&&&&&&&&&&&&using&(var&ctx&=&new&ForeignKeysEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Product&p&=&new&Product
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Name&=&"webabcd&test"&+&_random.Next().ToString(),
&&&&&&&&&&&&&&&&&&&&ProductNumber&=&_random.Next().ToString(),
&&&&&&&&&&&&&&&&&&&&StandardCost&=&1,
&&&&&&&&&&&&&&&&&&&&ListPrice&=&1,
&&&&&&&&&&&&&&&&&&&&SellStartDate&=&DateTime.Now,
&&&&&&&&&&&&&&&&&&&&rowguid&=&Guid.NewGuid(),
&&&&&&&&&&&&&&&&&&&&ModifiedDate&=&DateTime.Now,
&&&&&&&&&&&&&&&&&&&&ProductCategoryID&=&18
&&&&&&&&&&&&&&&&};
&&&&&&&&&&&&&&&&//&这里需要手工&Add&这个新的&Product,然后再调用&SaveChanges()
&&&&&&&&&&&&&&&&ctx.Products.AddObject(p);
&&&&&&&&&&&&&&&&Response.Write(ctx.SaveChanges());
&&&&&&&&&&&&}
&&&&&&&&&&&&Response.Write("&br&/&&br&/&");
&&&&&&&&&&&&//&在一个已存在的产品类别下新建一个产品(通过外键对象)
&&&&&&&&&&&&using&(var&ctx&=&new&ForeignKeysEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Product&p&=&new&Product
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Name&=&"webabcd&test"&+&_random.Next().ToString(),
&&&&&&&&&&&&&&&&&&&&ProductNumber&=&_random.Next().ToString(),
&&&&&&&&&&&&&&&&&&&&StandardCost&=&1,
&&&&&&&&&&&&&&&&&&&&ListPrice&=&1,
&&&&&&&&&&&&&&&&&&&&SellStartDate&=&DateTime.Now,
&&&&&&&&&&&&&&&&&&&&rowguid&=&Guid.NewGuid(),
&&&&&&&&&&&&&&&&&&&&ModifiedDate&=&DateTime.Now,
&&&&&&&&&&&&&&&&&&&&ProductCategory&=&ctx.ProductCategories.Single(c&=&&c.ProductCategoryID&==&18)
&&&&&&&&&&&&&&&&};
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&//&这里直接调用&SaveChanges()&即可,而不用再手工地&Add&这个新的&Product
&&&&&&&&&&&&&&&&//&因为与这个新的&Product&关联的那个已存在的&ProductCategory&会自动地&Add&这个新的&Product
&&&&&&&&&&&&&&&&Response.Write(ctx.SaveChanges());
&&&&&&&&&&&&}
2、复杂类型的 Demo
EntityFramework/ComplexType/Demo.aspx.cs
&*&ADO.NET&Entity&Framework&4.0&-&新增了对复杂类型的支持,即实体属性可以是一个复杂类型
&*&1、在&EDM&设计器中的实体上,点击右键,在&Add&选项中可以新建一个复杂类型
&*&2、在&EDM&设计器中的实体上,选中多个属性后,点击右键,选择&Refactor&into&New&Complex&Type&可以合并多个属性为一个复杂类型
&*&3、在&EDM&设计器中的&Mapping&Details&窗口或&Model&Broswer&窗口里,可以对复杂类型做编辑
&*&ADO.NET&Entity&Framework&4.0&-&对存储过程的支持有了明显的增强
&*&表现为:可以将存储过程的返回值映射到一个自定义的复杂类型上,当然,这个复杂类型也可以根据储过程的返回值自动生成
using&System.Collections.G
using&System.L
using&System.W
using&System.Web.UI;
using&System.Web.UI.WebC
namespace&plexType
&&&&public&partial&class&Demo&:&System.Web.UI.Page
&&&&&&&&protected&void&Page_Load(object&sender,&EventArgs&e)
&&&&&&&&&&&&using&(var&ctx&=&new&ComplexTypeEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//&这里的&Name&类型是自定义的一个复杂类型(其有三个属性,分别为FirstName,&MiddleName,&LastName),详见&EDM
&&&&&&&&&&&&&&&&Name&name&=&ctx.Customers.First().N
&&&&&&&&&&&&&&&&Response.Write(string.Format("FirstName:&{0}&br&/&MiddleName:&{1}&br&/&LastName:&{2}",&name.FirstName,&name.MiddleName,&name.LastName));
&&&&&&&&&&&&}
&&&&&&&&&&&&Response.Write("&br&/&&br&/&");
&&&&&&&&&&&&using&(var&ctx&=&new&ComplexTypeEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&//&这里的&MyCustomer&类型,是存储过程&uspSelectCustomer(其概念模型为:GetCustomer())&的返回值的映射类型
&&&&&&&&&&&&&&&&MyCustomer&customer&=&ctx.GetCustomer().First();
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&Response.Write(string.Format("CustomerID:&{0}&br&/&FirstName:&{1}&br&/&MiddleName:&{2}&br&/&LastName:&{3}",&customer.CustomerID,&customer.FirstName,&customer.MiddleName,&customer.LastName));
&&&&&&&&&&&&}
3、将一个表拆为多个概念实体的 Demo
EntityFramework/TableSplitting/Demo.aspx.cs
1、将多个表映射到一个概念实体,原来就可以。在&EDM&设计器中将两个一对一的表映射到一个实体即可
2、将一个表拆为多个概念实体,原来也行,但是要在&xml&中手工配置。现在&VS2010&中只需在&EDM&设计器中做如下设置:
&&&&a、新建两个实体,做好相关字段相对于原表的映射
&&&&b、在这两个实体间新建一个一对一的关联
&&&&c、双击这个关联线,编辑约束,指明主表和依赖表,并设置相关的主键
using&System.Collections.G
using&System.L
using&System.W
using&System.Web.UI;
using&System.Web.UI.WebC
namespace&DataAccess.EntityFramework.TableSplitting
&&&&public&partial&class&Demo&:&System.Web.UI.Page
&&&&&&&&protected&void&Page_Load(object&sender,&EventArgs&e)
&&&&&&&&&&&&//&将一个&ErrorLog&表映射到两个实体上&ErrorLog&和&ErrorLogExt,详见&EDM
&&&&&&&&&&&&using&(var&ctx&=&new&TableSplittingEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&ErrorLog&log&=&ctx.ErrorLogs.First();
&&&&&&&&&&&&&&&&Response.Write(log.ErrorLogID);
&&&&&&&&&&&&&&&&Response.Write("&br&/&");
&&&&&&&&&&&&&&&&log.ErrorLogExtReference.Load();
&&&&&&&&&&&&&&&&Response.Write(log.ErrorLogExt.ErrorMessage);
&&&&&&&&&&&&}
4、LINQ to Entities 新功能的 Demo
EntityFramework/LINQ2Entities/Demo.aspx.cs
&*&ADO.NET&Entity&Framework&4.0&-&增强了&LINQ&to&Entities
using&System.Collections.G
using&System.L
using&System.W
using&System.Web.UI;
using&System.Web.UI.WebC
using&System.Data.O
namespace&DataAccess.EntityFramework.LINQ2Entities
&&&&public&partial&class&Demo&:&System.Web.UI.Page
&&&&&&&&protected&void&Page_Load(object&sender,&EventArgs&e)
&&&&&&&&&&&&Demo1();
&&&&&&&&&&&&Demo2();
&&&&&&&&&&&&//&支持&Single()&扩展方法了,之前的版本不支持
&&&&&&&&private&void&Demo1()
&&&&&&&&&&&&//&ADO.NET&Entity&Framework&4.0&-&新增了&System.Data.Objects.EntityFunctions&和&System.Data.Objects.SqlClient.SqlFunctions
&&&&&&&&&&&&//&其作用相当于&Linq&to&Sql&中的&System.Data.Linq.SqlClient.SqlMethods
&&&&&&&&&&&&using&(var&ctx&=&new&LINQ2EntitiesEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&var&products&=
&&&&&&&&&&&&&&&&&&&&&&from&p&in&ctx.Products
&&&&&&&&&&&&&&&&&&&&&&where&System.Data.Objects.SqlClient.SqlFunctions.DateDiff("year",&p.SellStartDate,&DateTime.Now)&&=&10
&&&&&&&&&&&&&&&&&&&&&&select&p;
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&Response.Write((products&as&System.Data.Objects.ObjectQuery).ToTraceString());
&&&&&&&&&&&&&&&&Response.Write("&br&/&");
&&&&&&&&&&&&&&&&Response.Write("十年内销售的产品数量为:"&+&products.Count());
&&&&&&&&&&&&}
&&&&&&&&&&&&Response.Write("&br&/&&br&/&");
&&&&&&&&&&&&//&上面的示例如果写成&esql&就是如下的写法。当然这个原来就支持。
&&&&&&&&&&&&using&(var&ctx&=&new&LINQ2EntitiesEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&string&esql&=&"select&value&p&from&LINQ2EntitiesEntities.Products&as&p&where&SqlServer.DATEDIFF('year',&p.SellStartDate,&SqlServer.GETDATE())&&=&10";
&&&&&&&&&&&&&&&&//&string&esql&=&"using&SqlS&select&value&p&from&LINQ2EntitiesEntities.Products&as&p&where&DATEDIFF('year',&p.SellStartDate,&GETDATE())&&=&10";
&&&&&&&&&&&&&&&&ObjectQuery&Product&&products&=&ctx.CreateQuery&Product&(esql);
&&&&&&&&&&&&&&&&Response.Write(products.ToTraceString());
&&&&&&&&&&&&&&&&Response.Write("&br&/&");
&&&&&&&&&&&&&&&&Response.Write("十年内销售的产品数量为:"&+&products.Count());
&&&&&&&&&&&&}
&&&&&&&&&&&&Response.Write("&br&/&&br&/&");
&&&&&&&&private&void&Demo2()
&&&&&&&&&&&&//&使用&esql&的方式调用&sql&中的用户自定义函数
&&&&&&&&&&&&using&(var&ctx&=&new&LINQ2EntitiesEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&string&esql&=&"select&value&top(1)&LINQ2EntitiesModel.Store.ufnGetFullName(c.firstName,&c.middleName,&c.lastName)&from&LINQ2EntitiesEntities.Customers&as&c";
&&&&&&&&&&&&&&&&ObjectQuery&string&&customers&=&ctx.CreateQuery&string&(esql);
&&&&&&&&&&&&&&&&Response.Write((customers&as&System.Data.Objects.ObjectQuery).ToTraceString());
&&&&&&&&&&&&&&&&Response.Write("&br&/&");
&&&&&&&&&&&&&&&&foreach&(var&customerName&in&customers.ToList())
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Response.Write(customerName);
&&&&&&&&&&&&&&&&&&&&Response.Write("&br&/&");
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&Response.Write("&br&/&&br&/&");
&&&&&&&&&&&&//&clr&的方式调用&sql&的用户自定义函数。具体实现见&MyClass&类
&&&&&&&&&&&&using&(var&ctx&=&new&LINQ2EntitiesEntities())
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&var&customers&=
&&&&&&&&&&&&&&&&&&&&from&c&in&ctx.Customers
&&&&&&&&&&&&&&&&&&&&select&MyClass.GetFullName(c.FirstName,&c.MiddleName,&c.LastName);
&&&&&&&&&&&&&&&&customers&=&customers.Take(1);
&&&&&&&&&&&&&&&&Response.Write((customers&as&System.Data.Objects.ObjectQuery).ToTraceString());
&&&&&&&&&&&&&&&&Response.Write("&br&/&");
&&&&&&&&&&&&&&&&foreach&(var&customerName&in&customers.ToList())
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Response.Write(customerName);
&&&&&&&&&&&&&&&&&&&&Response.Write("&br&/&");
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&public&static&class&MyClass
&&&&&&&&&&&&
&&&&&&&&&&&&//&System.Data.Objects.DataClasses.EdmFunction(string&namespaceName,&string&functionName)&-&将&sql&中的指定的用户自定义函数映射到&clr&的方法上
&&&&&&&&&&&&//&&&&&string&namespaceName&-&SSDL(存储模型)的命名空间,可以在&edmx&文件中找到这个值
&&&&&&&&&&&&//&&&&&string&functionName&-&sql&中的用户自定义函数名
&&&&&&&&&&&&[System.Data.Objects.DataClasses.EdmFunction("LINQ2EntitiesModel.Store",&"ufnGetFullName")]
&&&&&&&&&&&&///&&summary&
&&&&&&&&&&&&///&此方法的参数要与其所映射的&sql&用户自定义函数的参数相匹配
&&&&&&&&&&&&///&此方法只可用于&linq&表达式,方法内不用做任何实现
&&&&&&&&&&&&///&&/summary&
&&&&&&&&&&&&public&static&string&GetFullName(string&firstName,&string&middleName,&string&lastName)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&throw&new&NotSupportedException("You&can&only&call&this&method&as&part&of&a&LINQ&expression");
&&&&&&&&&&&&}
5、POCO 的 Demo
&%@&Page&Language="C#"&AutoEventWireup="true"&CodeBehind="Demo.aspx.cs"&Inherits="POCODemo.Demo"&%&
&!DOCTYPE&html&PUBLIC&"-//W3C//DTD&XHTML&1.0&Transitional//EN"&"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&
&html&xmlns="http://www.w3.org/1999/xhtml"&
&head&runat="server"&
&&&&&title&&/title&
&&&&&form&id="form1"&runat="server"&
&&&&&&&&ADO.NET&Entity&Framework&4.0&-&新增了对&POCO(Plain&Old&CLR&Object)的支持,即&Model&代码中不会有任何关于持久化的代码
&&&&&&&&&ul&
&&&&&&&&&&&&&li&1、线上有&POCO&的&T4(Text&Template&Transformation&Toolkit)模板&/li&
&&&&&&&&&&&&&li&2、在&EDM&设计器上单击右键,选择&Add&Code&Generation&Item&,在线上模板中选择&ADO.NET&C#&POCO&Entity&Generator&模板生成即可&/li&
&&&&&&&&&&&&&li&3、在&EF&中,POCO&与非&POCO&不能在一个项目中共存,因为非&POCO&的&EF&在&assembly&级别上会有如下声明&br&/&
&&&&&&&&&&&&&&&&using&System.Data.Objects.DataC&br&/&
&&&&&&&&&&&&&&&&[assembly:&EdmSchemaAttribute()]&br&/&
&&&&&&&&&&&&&&&&而&POCO&不需要这个声明,所以一个程序集内不能既有&POCO&又有非&POCO&&/li&
&&&&&&&&&&&&&li&4、具体的&POCO&代码,详见本例中的由&POCO&模板生成的代码&&/li&
&&&&&&&&&/ul&
&&&&&/div&
&&&&&/form&
6、其他新特性
EntityFramework/Others.aspx
&%@&Page&Title="其它,一笔带过"&Language="C#"&MasterPageFile="~/Site.Master"&AutoEventWireup="true"
&&&&CodeBehind="Others.aspx.cs"&Inherits="DataAccess.EntityFramework.Others"&%&
&asp:Content&ID="Content1"&ContentPlaceHolderID="head"&runat="server"&
&/asp:Content&
&asp:Content&ID="Content2"&ContentPlaceHolderID="ContentPlaceHolder1"&runat="server"&
&&&&&&&&1、T4&模板引擎(微软的一个代码生成引擎)&-&Text&Template&Transformation&Toolkit
&&&&&&&&2、增强了&EDM&设计器
&&&&&&&&3、对&Model-First&的支持,即根据概念模型生成存储模型和映射模型
&&&&&&&&&ul&
&&&&&&&&&&&&&li&在概念模型(EDM&设计器)上单击右键,选择&&Generate&Database&from&Model&,即可生成数据库脚本&/li&
&&&&&&&&&&&&&li&
&&&&&&&&&&&&&&&&在&EDM&设计器中,与&Model-First&相关的字段属性说明
&&&&&&&&&&&&&&&&&ul&
&&&&&&&&&&&&&&&&&&&&&li&StoreGeneratedPattern&-&该字段所对应的数据库中的列属性(有三种:无,自增,通过计算而来)&/li&
&&&&&&&&&&&&&&&&&&&&&li&FixedLength&-&FixedLength=true&对应&nchar,&FixedLength=false&对应&nvarchar&/li&
&&&&&&&&&&&&&&&&&&&&&li&Unicode&-&是否是&Unicode&编码。比如字符串如果是非&Unicode&则对应&varchar,如果是&Unicode&则对应&nvarchar&/li&
&&&&&&&&&&&&&&&&&&&&&li&Max&Length&-&最大字符数。对应&varchar(n)&或&nvarchar(n)&中的&n&/li&
&&&&&&&&&&&&&&&&&/ul&
&&&&&&&&&&&&&/li&
&&&&&&&&&/ul&
&&&&&&&&4、Code&Only&-&在&POCO&的基础上,连&EDM&也不需要了(即不用再做概念模型,映射模型,存储模型的配置),&纯写代码即可,可惜在&EF&4.0&的正式版里这个功能被去掉了
&&&&&&&&5、&改进了&SQL&语句的生成
&&&&&&&&6、Lazy&Loading&-&支持延迟加载,相关设置&context.ContextOptions.DeferredLoadingEnabled&=&&其默认值就是&true
&&&&&&&&7、Explicit&Loading&-&显示加载,看下面的例子
&&&&&&&&&ul&
&&&&&&&&&&&&&li&加载导航属性的方法如下(当然&Include&也可以达到同样的效果)context.LoadProperty(category,&"Products");&/li&
&&&&&&&&&&&&&li&上面那个方法(包括&Include)不太好,因为如果实体集名称写错的话&runtime&的时候是才能发现,所以为了避免写错可以使用如下方法&context.LoadProperty(category,&c&=&&c.Products);&/li&
&&&&&&&&&/ul&
&&&&&&&&8、几种自带的&T4&模板的说明
&&&&&&&&&ul&
&&&&&&&&&&&&&li&ADO.NET&EntityObject&Generator&-&把&edmx&文件中的内联代码摘出来&/li&
&&&&&&&&&&&&&li&ADO.NET&POCO&Entity&Generator&-&生成&POCO(Plain&Old&CLR&Object)&实体,其包括每个表所映射的实体及一个Context,POCO&中不会包含持久化相关的代码(这个模板非内置,可以在线上模板中找到)&/li&
&&&&&&&&&&&&&li&ADO.NET&Self-Tracking&Entity&Generator&-&POCO&的加强版,在&POCO&的基础上增加了实体状态自跟踪的功能&/li&
&&&&&&&&&/ul&
&&&&&&&&9、新建&EDM&的时候,在向导中有一个选项&pluralize&or&singularize&generated&object&names&,其意思为:生成对应的&Model&时,实体名称自动用单数形式,实体集名称自动用复数形式
&/asp:Content&本文是《ASP.NET 4.0与Entity Framework 4》系列文章的第一篇,该系列将向你介绍如何采用Entity Framewok4开发ASP.NET程序。文章会一步一步的教您使用Entity Framewok4创建数据库。创建好的数据库将会在以后该系列文章中使用。
已经发布的Visual Studio 2010 中包含了Entity Framewok4,它是微软发布的第二版Entity Framewok(以下简称EF)。它在EF 1的基础上,根据开发者的建议,进行了非常多的改进,包含了与NHibernate之类O-R Mapping 工具类似的功能。O-R Mapping工具给我们生成了用于检索和持久化数据的繁琐代码。我们只需要用可视化的工具创建类与表,表关系,存储过程和其他数据库对象的映射。EP4 最大的一个新功能是:允许我们创建一个ADO.NET 实体对象模型,然后根据这个模型来产生数据库。以前一般的做法是,先创建数据库,后产生实体模型。当然,EF4还是支持一般的数据库设计,但可以使用Visual Studio 基于对象模型设计数据库,已经是改进了许多。
本文的目的是介绍如何如何通EF4创建一个ADO.NET 实体数据模型。采用的工具是Visual Studio 2010 Beta 2,可能会与最终发布的版本操作有所不同。以后的文章将会基于该应用逐步深入的讲解如何采用EP4查询展示数据,调用存储过程,对EF4产生的类进行自定义等等。
采用Model-First方式创建数据库
步骤1:创建解决方案
1.运行Vistual Studio 2010 Beta2。
2.在开始页面上点击“new project”。
3.点击C#节点,可以看到已经安装的项目模板。
4.在模板列表中选择ASP.NET Web Application。
5.输入项目名“OrderSystem”,点击“ok”。
这时,VS会在你指定的目录,创建一个解决方案,在该目录的子文件下创建一个网站项目。
步骤2:创建ADO.NET 实体对象模型
下面就是创建ADO.NET 生实体模型了。对于本程序来说,我们有Users和Addresses两个概念模型。一个user可能有多个address,在模型中要体现这个关系。
1.在OrderSystem上右键,选择Add,点击New Item..(或者使用快捷键Ctrl+Shift+A)。
2.点击C#节点下面的Data子节点。
3.选择ADO.NET Entity Data Model 模板。
4.将名字改为“OrderDB.edmx”,点击“Add”按钮。
5.VS将会显示Entity Data Model Wizard.你可以选择模型的来源。
6.选择“Empty Model”,点击“Finish”按钮。
OrderDB.edmx将会添加到你的项目中,同时会显示Entity Framework 设计器。
步骤3:创建实体关系
下面将会创建user实体已经它与addresses实体的关系,首先创建user实体。
1.在Entity Framework 设计器右键,Add-&Entity。
2.你会看到“Add Entity”对话框,输入实体名。需要注意的是,当你输入实体名时,系统会自动产生实体集合的名称(实体名是一个代表一条纪录的类的名称,实体集后则是一个代表一组纪录的类的名称)。
3.VS默认会产生一个名为Id的主键。如果把你不想产生主键,不要选择“Create key property”。本例中需要主键,所以保持选择状态。
4.点击“OK”,UserAccout实体将会添加到实体图表中。
5.接下来是给实体添加属性。这些属性将会映射到数据表中的字段。我们将会添加FirstName和LastName属性。
6.在UserAccount上右击。选择Add-&Scalar property。
7.将属性名改为FirstName。
8.在属性窗口中,将最大长度设为50,数据类型不用改,默认是String.
9.以同样的方式添加另一个名为LastName的属性,最大长度也设为50。
下面是添加纪录创建时间和更新时间属性。我个人比较倾向于在每个实体中添加创建时间和更新时间属性,这样可以方便以后审查。这两个属性将作为一个复杂类型添加在每个实体中。复杂类型可以让你定义一组属性,满足各种实体的需求。
10.模型浏览窗口中,在Complex Types 节点上右击。有时可能要多点击几下才能选中,这可能是VS Beta2的bug。点中Coomplex Types后,在弹出的菜单中选择“Create Complex Type”。
11.将复杂类型的名字改为 AuditFields。
12.右击模型浏览窗口的AuditFileds复杂属性,在弹出的菜单中,选择Add-&Scalar Property-&DateTime。
13.将名字改为“InsertDate”。
14.用同样的方式添加UpdateDate属性到该复杂类型中。
15.接下来你可以添加该复杂类型到UserAccount实体了,右击UserAccount实体,在弹出的菜单中选择Add-&Complex Property。
16.将名字改为“AuditFileds”,数据类型默认为AudtFields。
17.在设计器上右击,弹出的菜单中选择Add-&Entity.
18.实体名字改为“Address”,点击“OK”。
19.给Address实体添加Address1,Address2,City,State和Zip属性,所有的属性都为String类型,数据长度分别为:50,50,50,2和5。
20.在属性窗口中,将Address2的Nullable设置为True,其他几个属性都是必填的。
21.同样,给Address实体添加AuditFileds属性。
下面就是建立UserAccount和Address实体之间的关系了。
22.右击UserAccount实体,弹出菜单中选择Add-&Association。
23.你会看到在Add Association窗口默认设置好了UserAcccount和Address一对多的关系,如果你要设置不同类型的关系,在Mutiplicity下拉框中选择就可以了,本例中保持默认就可以。点击“OK”后,你会看到Address表多了一个UserAccountId属性。
步骤4:生成数据库
实体已经创建好了,下面是创建数据库了。在VS操作这些非常方便,它将会产生用来创建表,索引和表关系的DLL语句脚本。
1.在设计器上右击,选择Generate Database from Model.将会出现Generate Database Wizard窗口。
2.点击“New Connection”按钮。
3.输入Server name,选择Windows Authentication 或 SQL Server Authentication,这取决于你数据库系统的连接方式。
4.数据库名输入“OrderSystem”,点击“OK”。
5.这时VS会提示你数据库不存在,问你是否新建一个数据库,点击“Yes”。
6.数据库“OrderSystem”创建好后,会返回到Generate Database Wizard窗口,点击“Next”。
7.用于创建数据库的DLL语句这时就生成了。
8.点击“Finish”按钮。
9.你会看到项目中多了一个OrderDB.edmx.sql文件,它里面包含用来创建数据库的DLL语句。文件内容如下:
SET QUOTED_IDENTIFIER OFF;
SET ANSI_NULLS ON;
USE [OrderSystem]
IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]')
-- --------------------------------------------------
-- Dropping existing FK constraints
-- --------------------------------------------------
IF OBJECT_ID(N'[dbo].[FK_UserAccountAddress]', 'F') IS NOT NULL
ALTER TABLE [dbo].[Addresses] DROP CONSTRAINT [FK_UserAccountAddress]
-- --------------------------------------------------
-- Dropping existing tables
-- --------------------------------------------------
IF OBJECT_ID(N'[dbo].[UserAccounts]', 'U') IS NOT NULL
DROP TABLE [dbo].[UserAccounts];
IF OBJECT_ID(N'[dbo].[Addresses]', 'U') IS NOT NULL
DROP TABLE [dbo].[Addresses];
-- --------------------------------------------------
-- Creating all tables
-- --------------------------------------------------
-- Creating table 'UserAccounts'
CREATE TABLE [dbo].[UserAccounts] (
[FirstName] nvarchar(50)
[LastName] nvarchar(50)
[AuditFields_InsertDate] datetime
[AuditFields_UpdateDate] time
-- Creating table 'Addresses'
CREATE TABLE [dbo].[Addresses] (
[Address1] nvarchar(50)
[Address2] nvarchar(50)
[City] nvarchar(50)
[State] nvarchar(2)
[Zip] nvarchar(5)
[AuditFields_InsertDate] datetime
[AuditFields_UpdateDate] time
[UserAccountId] int
-- --------------------------------------------------
-- Creating all Primary Key Constraints
-- --------------------------------------------------
-- Creating primary key on [Id] in table 'UserAccounts'
ALTER TABLE [dbo].[UserAccounts] WITH NOCHECK
ADD CONSTRAINT [PK_UserAccounts]
PRIMARY KEY CLUSTERED ([Id] ASC)
ON [PRIMARY]
-- Creating primary key on [Id] in table 'Addresses'
ALTER TABLE [dbo].[Addresses] WITH NOCHECK
ADD CONSTRAINT [PK_Addresses]
PRIMARY KEY CLUSTERED ([Id] ASC)
ON [PRIMARY]
-- --------------------------------------------------
-- Creating all Foreign Key Constraints
-- --------------------------------------------------
-- Creating foreign key on [UserAccountId] in table 'Addresses'
ALTER TABLE [dbo].[Addresses] WITH NOCHECK
ADD CONSTRAINT [FK_UserAccountAddress]
FOREIGN KEY ([UserAccountId])
REFERENCES [dbo].[UserAccounts]
ON DELETE NO ACTION ON UPDATE NO ACTION
需要注意的是,现在数据库还没有创建相应的表。要创建这些表,你可以打开OrderDB.edmx.sql文件,右击选择Execute SQL。这时VS会提示你连接到数据库系统,输入相关信息,点击“Connect”,登陆成功后,将会执行这些SQL语句,执行完后数据库的表就创建好了。
以上就是采用Entity Framework的Model First方式创建数据库的的所有步骤了。相比以前的版本,有相当大的改进,现在你只需要设计对象模型,VS会自动帮你生成创建数据表,索引,表关系的语句。
本文是该系列文章的第一篇。以后的文章将会带你逐步深入到Entity Framework4和ASP.NET 4.0的世界。下一篇文章将会向你介绍如何呈现这些数据,以及采用Entity Framework4进行数据的增删改查,希望你能喜欢。
LloydSheng
项目文件:/lloydsheng/OrderSystem.zip
独立博客本文链接:/2010/04/aspnet-40-and-entity-framework4-part1-create-database-using-modelfirst-development.html
摘要 本文将向你介绍如何调用存储过程对SQL Server数据库中的数据进行CRUD操作。文中使用的数据库依然是在本系列第一篇文章《采用Model-First 开发方式创建数据库》中创建的,使用的Web页面是在第二篇文章《使用Entity Framework 进行CRUD操作》中创建的 ,可以点击[代码]下载链下载项目文件,要用VS2010打开。 步骤1.创建存储过程 首先需要创建存储过程,第一个
本文将向你介绍如何使用Entiity Framework对SQL Sever中的数据进行增删改查(CRUD)操作。文中使用的数据库是上一篇文章《采用Model-First开发方式创建数据库》创建的。当然你还需要下载Visual Studio 2010来打开上一篇文章的项目文件。项目文件的下载链接:点击下载。
步骤1:修改第一篇文章中的数据库 在第一篇里,我们使用EF4创建了2个实体。
本系列的前3篇文章已经向大家介绍了如何使用Entity Framework4(以下简称EF4)创建数据库并进行增删改查操作,还介绍了存储过程的调用方法。在以前的例子中,我们没对代码进行分层,只是简单的介绍实现各种操作的方式。今天我们就来谈谈在三层架构中使用EF4 ,想必很多人已经对三层有过了解。 当然,三层不一定适合所有应用开发,但分层的思想是值得借鉴的。 本文所有的Web页面都和以前一样,不同的
[源码下载]
精进不休 .NET 4.0 (8) - ADO.NET Entity Framework 4.0 Self Tracking Entity
作者: webabcd
ADO.NET Entity Framework 4.0 的新增功能
对 Self Tracking Entity(实体状态自跟踪)的支持,基于 POCO WCF
[索引页][源码下载]
精进不休 .NET 4.0 (10) - ADO.NET Entity Framework 4.3 之 Code First 下自动更新数据库结构(Automatic Migrations)
作者:webabcd介绍ADO.NET Entity Framework 4.3 的新特性:Code First下自动更新数据库结构(Automatic
[源码下载]
精进不休 .NET 4.0 (7) - ADO.NET Entity Framework 4.0 新特性
作者: webabcd
ADO.NET Entity Framework 4.0 的新增功能
对外键的支持,即把外键当做实体的一个属性来处理 对复杂类型的支持,即实体属性可以是一个复杂类型 将多个表映射到一个概
[索引页][源码下载]
精进不休 .NET 4.0 (9) - ADO.NET Entity Framework 4.1 之 Code First
作者:webabcd介绍ADO.NET Entity Framework 4.1 的新增功能:Code First 示例Web.config
&?xml version=&1.0&?& &con
作为下一代 ADO.NET 3.0 的开发框架,Entity Framework 让我们从复杂的关系数据模型中解脱出来,使用更加符合面向对象的实体数据模型(Entity Data Model)来完成业务设计和开发。
Entity Framework 很像 NHibernate,同样采取 XML 进行映射。不过借助于强大的可视化设计工具和向导,我们可以非常方便地完成这些头疼的工作。En
Entity Framework(EF)存取Entity的三种方式。
LINQ to Entities 直接通过LINQ存取,可完全将程序与数据库分离,由LINQ在内部自动使用Object Service进行数据库操作
Object Service 可以透过Entity SQL(eSQL)来存取Entity,并且直接以对象的方式来存取结果集(因为结果集本身就是对象的集合)。
这个Entity Framework扩展完全支持EF 5.0/6.0,项目地址 /loresoft/EntityFramework.Extended,这个库支持批量更新,删除。查询结果缓存和审计日志。这个扩展对于每次批量操纵只生成一条sql语句,而不会像EntityFramework供给的原生办法那样批量N条数据就要生成N条sql语句。 园子里也有了一个详细的介
Entity Framework 4的特性介绍可看这篇文章 .NET 4中Entity Framework简介,其中最感兴趣的一点就是对POCO的支持了:EF4为实体提供了简单传统CLR对象(Plain Old CLR Object / POCO)支持。您的实体对象可以独立于EF存在,由此EF更好地支持了测试驱动开发(test-driven development)和领域驱动设计(domain-d
[源码下载]
再接再厉VS 2008 sp1 + .NET 3.5 sp1(4) - Entity Framework(实体框架)之EntityClient, ObjectQuery
作者: webabcd
介绍 以Northwind为示例数据库,ADO.NET Entity Framework之详解EntityClient, ObjectQuery
Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。 Entity Framework的主要特点: 1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2); 2. 强劲的映射引擎,能很好地支持存储过程; 3. 提供Vis
Zeeshan Hirani写了一本有500页的Entity Framework电子书,可以免费下载. 电子书下载地址: Entity Framework learning guide ,还包含了一个完整的示例,包括完整的数据库 Complete Project With databases 具体内容参看: http://weblogs.asp.net/zeeshanhirani/archive/
与Entity Framework相伴的日子痛并快乐着。今天和大家分享一下一个快乐,两个痛苦。 先说快乐的吧。Entity Framework在将数据插入数据库时,如果主键字段是自增标识列,会将该自增值返回给实体对象对应的属性。 比如下面添加博客随笔至数据库的示例代码:
var blogPost
BlogPost(){ Author
& 博客园 &qu
[源码下载]
再接再厉VS 2008 sp1 + .NET 3.5 sp1(2) - Entity Framework(实体框架)之详解 Linq To Entities 之一
作者: webabcd
介绍 以Northwind为示例数据库,ADO.NET Entity Framework之Linq To Entities
First - 返回集合中的第一个成员;
上篇随笔中,我们留下了一个难题——如何将客户端浏览器通过ajax提交的json数据传递给一个已存在的实体对象(也就是将json数据赋值给实体对象对应的属性)。这样的话,Entity Framework就能自动发现哪些属性值发生了变化,在保存时,只将发生变化的属性值更新至对应的数据库字段。 需要注意的是这里提交的json数据中的属性是动态的,不一定包含实体对象的所有属性,比如:这次提交的是{&quo
在博客园新版博客后台的开发中,为了将园子的现代化建设步伐迈得更大一些,准备装备最先进的武器。之前已经配备ASP.NET MVC 3,目前正在试验刚从微软引进的最新型号新式武器——Entity Framework 4.1 RC。 试验情况分析: 1. 数据库连接字符串的回归 在之前版本的Entity Framework中,微软另搞了一套连接字符串,以至无法直接使用原来的ADO.NET连接字符串。害得
[源码下载]
再接再厉VS 2008 sp1 + .NET 3.5 sp1(6) - Entity Framework(实体框架)之Entity SQL
作者: webabcd
介绍 以Northwind为示例数据库,ADO.NET Entity Framework之详解Entity SQL
Linq 方法上也可以使用 esql 查询表达式
select, fr
这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名' 注:本文针对的是Entity FrameworkCode First场景,Entity Framework的版本是4.1与4.2。 3月份的时候在揭开Entity Framework
EF开发团队的博客上发了文章Entity Framework source code has been released under an open source license ,Scott 也发了相关的博客Entity Framework and Open Source。EF团队成员One Unicorn也写了博客 Why open sourcing Entity Framework is a
2011年6月新款 —— Entity Framework June 2011 CTP —— 发布于日,如果您感兴趣,可以去试驾啦。 试驾之前,了解一下新特性吧。
以下内容主要来自于对 Announcing the Microsoft Entity Framework June 2011 CTP 的翻译。 引擎(Entity Framework Runtime)的增强:
《看我72变》是蔡依林的一首歌,“我要洗心革面,人定可以胜天,梦想近在眼前。。。” 在代码世界中,有一种常见的“变” —— 类型转变。这篇文章分享的就是如何通过类型转变,解决Entity Framework(5.0之前的版本)中枚举类型(实体)与tinyint(数据库字段类型)的映射问题。 对于需要进行持久化的枚举类型,我们通常在数据库表中建立一个对应的tinyint类型的字段。 如果
在Entity Framework宣布开源后不久Entity Framework(EF) 5就正式发布了,ADO.NET官方博客上EF5 Released列出了EF5的新特性:
枚举类型支持 性能增强,特别是.NET 4.5中 自动使用localDb及SQLServerExpress Spatial types Table Valued Functions 带有多个结果集的存储过程
兼容性方面
随着 Entity Framework 最新主版本 EF6 的推出,Microsoft 对象关系映射 (ORM) 工具达到了新的专业高度,与久负盛名的 .NET ORM 工具相比已不再是门外汉。 EF 已经完全成熟,正在超越以前广泛使用的工具。 自 2012 年 EF5 发布后,这种做法带来了两个方面的进步。 首先,从 .NET Framework 中提取所有的 Entity Framework
随着.NET Framework 3.5 SP1 和 Visual Studio 2008 SP1的发布,Entity Framework也正式发布了,相应的Sample目前已经更新到RTM版本,可以从http://code./adonetefx 下载.从Beta版本到RTM的更新参看Updated Entity Framework Samples
在上篇文章中,我们理了一下基于外键关联的单向一对一关系。在这篇文章中,我们理一理“基于共享主键的单向一对一关系”,找出Entity Framework中正确的映射关系。 一、明确需求,也就是Entity Framework正确映射之后要达到的效果 1)数据库结构要符合要求——共享主键。所下图所示,数据库中表A与表B的主键都是AID。
2)实体关系要符合要求——单向一对一关系。我们通过下面的UML
使用Entity Framework 最要小心的性能杀手就是 —— 不正确的查询代码造成的数据库全表查询。 我们就遇到了一次,请看下面的示例代码:
//错误的代码Func&QuestionFeed, bool& predicate =if (type == 1){ predicate = f =& f.FeedID == id && f.
之前给自己放了一个比较长的假期,在这期间基本上没怎么来园子逛。很多朋友的留言也没有一一回复,在这里先向大家道个歉。最近一段时间的工作任务是如何将ADO.NET Entity Framework 4.0(以下简称EF)引入到我们的开发框架,进行相应的封装、扩展,使之成为一个符合在特定场景下进行企业级快速开发的ORM。在此过程中遇到了一些挑战,也有一些心得。为了向大家分享这些心得,也为了借助大家的脑袋
[源码下载]
再接再厉VS 2008 sp1 + .NET 3.5 sp1(3) - Entity Framework(实体框架)之详解 Linq To Entities 之二
作者: webabcd
介绍 以Northwind为示例数据库,ADO.NET Entity Framework之Linq To Entities
Select - 选择需要返回的字段 W
[源码下载]
再接再厉VS 2008 sp1 + .NET 3.5 sp1(5) - Entity Framework(实体框架)之ObjectContext
作者: webabcd
介绍 以Northwind为示例数据库,ADO.NET Entity Framework之详解ObjectContext, 以及事务和并发
ObjectContext - 以对象(这
Steve Sanderson在codeplex上发布了一个asp.net mvc validation framework xVal ,并写一篇详细的文章介绍这个框架 xVal - a validation framework for ASP.NET MVC。xVal可以把客户端和服务端的验证机制结合起来。 Validation with Asp.net MVC, xVal & IDat
[源码下载]
精进不休 .NET 4.0 (3) - asp.net 4.0 新特性之动态数据(Dynamic Data)增强, AJAX增强; IDE之Visual Studio 2010增强
作者: webabcd
asp.net 4.0 的新增功能
动态数据(Dynamic Data)增强(之前的版本:
[源码下载]
精进不休 .NET 4.0 (1) - asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
作者: webabcd
asp.net 4.0 的新增功能
简洁的 web.config 文件 控件的新属性
又来一篇,大家也许都嫌烦了。但是写博客既能提高自己,又能帮助别人,而且每次写的过程中和发布出来之后都有收获,真是太赚了!麻烦大家忍一忍吧。 言归正题,在之前的一篇随笔“准备用Entity Framework实现数据的按需更新”中,我们实现了按需更新,但和这里的指定字段更新的应用场景不一样。 之前的按需更新的应用场景是:把需要更新与不需要更新的数据都给Entity Framework,由EF自己判断
下班前,给大家分享一下今天研究Entity Framework的LINQ查询的一点小收获。 先看LINQ查询代码(是一个JOIN查询):
(BlogDbContext context
BlogDbContext()){ var result
context.BlogEntries join t
context.Po
[索引页][源码下载]
返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API
作者:webabcd介绍asp.net mvc 之 asp.net mvc 4.0 新特性之Web API
开发一个 CRUD 的 Demo,服务端用 Web API,并使其支持 jsonp 协议,客户端用 jQuery
示例1、自定义一个 Json
Entity Framework 4.3 版本终于为开发者带来了迁移(Migrations)功能,从此以后使用EF不必依赖于单独预发布的迁移库了。 什么是EF迁移呢?如果你正在使用Entity Framework Code-First,那么借助迁移功能,你可以不需要删除再重新创建数据库模式(database schema),而只要通过更新就能将改动映射到你的POCO类中。该过程包含生成DDL语句创
ADO.NET Entity Framework CodeFirst 如何输出日志(EF4.3) 用的EFProviderWrappers ,这个组件好久没有更新了,对于SQL执行日志的解决方案的需求是杠杠的,今天给大家介绍一个更好的组件Clutch.Diagnostics.EntityFramework,可以通过Nuget 获取:
这个框架定义了一个接口 IDbTracingListener:
今天在Boy's (小气的神) BLOG上看到一篇精彩的文章 Astoria to SQLite to Entity Framework to 建立你的ORM观念.文章说到了很多精彩的内容,从SQLite for ADO.NET 2.0 Data Provider 到 实体框架EF, 还有ORM的概念,列出了ORM的完整视图:
介绍了ORM的四个方向,即自上而下(Top-down),

我要回帖

更多关于 entity是什么意思 的文章

 

随机推荐