通过实体框架添加"产品"的3种方法.有什么不同?

4im*_*ble 9 linq-to-entities entity-framework objectcontext

阅读这篇题为"使用ObjectSet(实体框架)"的MSDN文章它显示了两个如何添加产品的示例..一个用于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);
   }
Run Code Online (Sandbox Code Playgroud)

我不会这样做,只是使用:

   // (My familiar way)
   using (AdventureWorksEntities context = new AdventureWorksEntities())
   {
      // Add the new object to the context.
      context.AddToProducts(newProduct);
   }
Run Code Online (Sandbox Code Playgroud)

这三种方式有什么区别?

"我的方式"只是使用ObjectQuery的另一种方式吗?

谢谢,Kohan

Cra*_*ntz 9

所有这些都做同样的事情,语法上的细微差别.

首先,让我们看看3.5的方式和"你的方式".如果你看一下EDMX的codegen文件,你会看到类似的东西:

    public void AddToProducts(Product product)
    {
        base.AddObject("Products", product);
    }
Run Code Online (Sandbox Code Playgroud)

因此,这两种方法完全相同,只是代码中的魔术字符串被代码版本替换,这种代码永远不会出错.

".NET 4方式"做同样的事情,但做得与众不同.它使用强类型ObjectSet<T>,允许您动态创建强类型引用,但不使用字符串.但是,在向上下文添加对象的情况下,我所知道的并没有真正的优势,除了它允许您更加一致地引用您的实体 - 您使用相同的属性从上下文中读取它们(Context.Products)用于编写它们.