entity-framework - 通过 Entity Framework 添加 "Product"的3种方法。有什么不同?

标签 entity-framework linq-to-entities objectcontext

阅读此MSDN文章,标题为“使用ObjectSet( Entity Framework )”,它显示了两个有关如何添加产品的示例。一个为3.5,另一个为4.0。

http://msdn.microsoft.com/en-us/library/ee473442.aspx

由于缺乏知识,我可能在这里完全错过了一些东西,但是我从未添加过这样的产品:

   //In .NET Framework 3.5 SP1, use the following code: (ObjectQuery)
   using (AdventureWorksEntities context = new AdventureWorksEntities())
   {
      // Add the new object to the context.
      context.AddObject("Products", newProduct);
   } 

   //New in .NET Framework 4, use the following code: (ObjectSet)
   using (AdventureWorksEntities context = new AdventureWorksEntities())
   {
      // Add the new object to the context.
      context.Products.AddObject(newProduct);
   }

我不会做任何一种方式,而只是使用:
   // (My familiar way)
   using (AdventureWorksEntities context = new AdventureWorksEntities())
   {
      // Add the new object to the context.
      context.AddToProducts(newProduct);
   }

这三种方式有什么区别?

“我的方式”是使用ObjectQuery的另一种方式吗?

谢谢,
高汉

最佳答案

它们所有人都做相同的事情,只是语法略有不同。

首先,让我们看一下3.5方式和“您的方式”。如果查看EDMX的代码生成文件,则会看到类似以下内容的内容:

    public void AddToProducts(Product product)
    {
        base.AddObject("Products", product);
    }

因此,这两种方法是完全相同的,只是代码中的魔幻字符串已替换为永远不会出错的代码生成版本。

“.NET 4方式”执行相同的操作,但执行方式不同。它使用强类型的ObjectSet<T>,它允许您动态创建强类型的引用,而无需使用字符串。但是,在将对象添加到上下文的情况下,我并没有真正的优势,除了它可以使您在引用实体方面更加一致-您可以使用相同的属性从上下文中读取它们(Context.Products)用来编写它们。

关于entity-framework - 通过 Entity Framework 添加 "Product"的3种方法。有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810988/

相关文章:

c# - join和groupby后如何排序

entity-framework - ObjectContext.Connection.BeginTransaction() 是否使用 MSDTC?

entity-framework - 哪一条路?数据库优先、模型优先、代码优先?

c# - 将 MariaDB 与 Entity Framework 结合使用

sql - 为什么 Entity Framework 会生成此 SQL?

c# - linq2entities 的 IQueryable 扩展方法

c# - Entity Framework 从上下文中删除对象,但不从数据库中删除对象

asp.net-mvc-3 - 在数据库优先方法中使用 DbContext 与 Objectcontext 定义数据注释

c# - Entity Framework 代码优先 : How to attach an entity and modify collection type property?

ASP.net vNext 和 Entity Framework 6