这听起来有点傻但我不确定当我想到“实体框架”时我实际使用的是什么。我注意到在搜索文档时,我经常会得到我根本没有或直接使用的对象和方法(例如objectcontext,EntityState,ect)。我也不确定我在任何给定时间使用的Linq(Linq2SQL,Linq2Entities,Linq2Objects)。
我认为我正在使用:
数据库优先的ADO.NET实体数据模型和Linq to Entities。
我的设置:
Microsoft Visual Studio Professional 2015,使用从官方网站下载的安装程序以默认设置安装。最新的,没有额外的插件,库或打包安装。
我做了什么:
设计这样的数据库并在SQL Server中创建
MyFooDB
table Foo ( PK int Id, varchar Name)
table Bar ( PK int Id, bit Active, FK int FooId references Foo.Id )
打开VS2015,文件>新>项目> C#> Windows>控制台应用程序。
创建并打开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();
}
所以我的问题是我使用的不同技术是什么以及它们如何相互关联?
答案 0 :(得分:2)
LINQ2SQL
是一种完全不同(并且不再受支持)的技术,它过去常常使用不同的模板,而且更快更简单。 EF版本(虽然两者之间没有实际关系)。
LINQ2Objects
是将LINQ表达式应用于内存中的对象/实例的描述,与EF或L2S实际上并不相同。
您确实在使用Entity Framework以及实体数据模型(EDMX)。 EDMX是旧版本EF的结转,你有一个设计表面(记得很酷的时候)来设计你的数据模型。使用EF6.x,您仍然可以使用它们,它们主要用于为您生成.cs
个文件。这已不再是大多数人认为的最佳实践"对于使用EF,现在生成模型的首选方法是使用Code First和POCO。
在幕后,EF 6.x仍然具有很多遗留在EDMX范例上的依赖性,所以代码首先和流畅的配置用于在某种程度上构建它,所以我不想想两者之间存在任何重大的功能差异。但一般来说,代码首先更容易使用,维护,并让第三方理解您的代码。
使用Entity Framework Core(以前称为Entity Framework 7),它已被完全重写,并且不再支持EDMX模型,因此仅凭此原因您可能会考虑放弃它们(不确定是否或者是什么迁移路径介于6和Core之间。