C# 我真正使用的是哪种实体框架技术?
这听起来有点傻,但当我想到“实体框架”时,我不确定我实际使用的是什么。我注意到,在搜索文档时,我通常会得到一些我根本没有或没有直接使用的对象和方法(如objectcontext、EntityState等)。我也不确定在任何给定时间使用哪个Linq(Linq2SQL、Linq2Entities、Linq2Objects) 我认为我在使用什么:C# 我真正使用的是哪种实体框架技术?,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,这听起来有点傻,但当我想到“实体框架”时,我不确定我实际使用的是什么。我注意到,在搜索文档时,我通常会得到一些我根本没有或没有直接使用的对象和方法(如objectcontext、EntityState等)。我也不确定在任何给定时间使用哪个Linq(Linq2SQL、Linq2Entities、Linq2Objects) 我认为我在使用什么: 数据库第一个ADO.NET实体数据模型和Linq到实体 我的设置: Microsoft Visual Studio Professional 2015,使用
数据库第一个ADO.NET实体数据模型和Linq到实体 我的设置:
Microsoft Visual Studio Professional 2015,使用从官方网站下载的安装程序以默认设置安装。到目前为止,未安装任何附加插件、库或包 我的工作:
- 设计这样的数据库并在SQLServer中创建它
MyFooDB table Foo ( PK int Id, varchar Name) table Bar ( PK int Id, bit Active, FK int FooId references Foo.Id )
- 打开VS2015,文件>新建>项目>C#>Windows>控制台应用程序
- 在解决方案资源管理器中,右键单击项目节点>添加>新建项>数据>ADO.NET实体数据模型
- 一个对话框打开,我从数据库中选择EF designer,连接到我的服务器并选择我的数据库“MyFooDB”。在对话框底部,它表示该设置将作为“MyFooDBEntities”保存在app.config中
- 有人问我想使用哪个版本的Entity Framework,这次我将选择6.X
- 此时会出现一个对话框,供我选择要包括哪些数据库对象。模型名称空间文本字段显示“MyFoodModel”。我选中“Foo”和“Bar”,然后单击Finish
- 将创建并打开一个edmx文件。我看到了我选择的对象的图表。在edmx文件下,我看到以下结构:
MyFooDBModel.edmx -MyFooDBModel.Context.tt -MyFooDBModel.Context.cs -MyFooDBModel.Designer.cs -MyFooDBModel.edmx.diagram -MyFooDBModel.tt -Foo.cs -Bar.cs
- 在Program.cs中,我实例化MyFooDBEntities并使用它:
var db = new MyFooDBEntities(); var firstFoo = db.Foos.First(x => x.Id == 1); if (!firstFoo.Bars.Any()) { Bar b = new Bar() { Id = 3, Active=true }; firstFoo.Bars.Add(b); db.SaveChanges(); }
.cs
文件。这不再是大多数人认为是使用EF的“最佳实践”,现在生成模型的首选方法是使用和POCs。
在幕后,EF 6.x仍然对EDMX范式有很多传统依赖,因此在某种程度上使用了代码优先和fluent配置来构建这一点,因此我认为两者之间没有任何显著的功能差异。但一般来说,代码优先更容易使用、维护,第三方也更容易理解您的代码
使用实体框架核心(以前的实体框架7),它已经被完全重写,并且EDMX模型不再被支持,因此,仅此原因,您可能会考虑抛弃它们(不确定迁移路径在6和核心之间是什么),
谢谢,我想了解最新情况,但我被所有类似的术语弄糊涂了,所以我宁愿在阅读过时的东西之前先问一下。