C# 我真正使用的是哪种实体框架技术?

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,使用

这听起来有点傻,但当我想到“实体框架”时,我不确定我实际使用的是什么。我注意到,在搜索文档时,我通常会得到一些我根本没有或没有直接使用的对象和方法(如objectcontext、EntityState等)。我也不确定在任何给定时间使用哪个Linq(Linq2SQL、Linq2Entities、Linq2Objects)

我认为我在使用什么:
数据库第一个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();
    }
    
所以我的问题是我使用的不同技术是什么,它们之间有什么联系

是一种完全不同(不再受支持)的技术,它过去有不同的模板,是EF的“更快更简单”版本(尽管两者之间没有实际关系)

是对将LINQ表达式应用于内存中的对象/实例的描述,实际上与EF或L2S不同

您确实在使用实体框架以及实体数据模型(EDMX)。EDMX是旧版本EF的延续,在旧版本EF中,您有一个用于设计数据模型的设计图面(还记得那些很酷的时候)。在EF6.x中,您仍然可以使用它们,它们基本上用于为您生成
.cs
文件。这不再是大多数人认为是使用EF的“最佳实践”,现在生成模型的首选方法是使用和POCs。 在幕后,EF 6.x仍然对EDMX范式有很多传统依赖,因此在某种程度上使用了代码优先和fluent配置来构建这一点,因此我认为两者之间没有任何显著的功能差异。但一般来说,代码优先更容易使用、维护,第三方也更容易理解您的代码


使用实体框架核心(以前的实体框架7),它已经被完全重写,并且EDMX模型不再被支持,因此,仅此原因,您可能会考虑抛弃它们(不确定迁移路径在6和核心之间是什么),

谢谢,我想了解最新情况,但我被所有类似的术语弄糊涂了,所以我宁愿在阅读过时的东西之前先问一下。