代码之家  ›  专栏  ›  技术社区  ›  4imble

3通过实体框架添加“产品”的方法。有什么区别?

  •  9
  • 4imble  · 技术社区  · 16 年前

    阅读这个题为“使用对象集(实体框架)”的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);
       }
    

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

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

    这三种方法有什么区别?

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

    谢谢, 科汉

    1 回复  |  直到 16 年前
        1
  •  9
  •   Craig Stuntz    16 年前

    它们都做相同的事情,语法上有细微的差别。

    首先,让我们看一下3.5和“你的方法”。如果你看EDMX的codegen文件,你会看到如下内容:

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

    所以这两个方法是完全相同的,只是代码中的魔法字符串被代码生成的版本替换了,这永远不会出错。

    “.NET 4 Way”执行相同的操作,但执行方式不同。它使用强类型 ObjectSet<T> ,它允许您动态创建强类型引用,但不使用字符串。但是,在向上下文添加对象的情况下,我不知道有什么真正的优势,只是它允许您在引用实体的方式上更加一致——您使用相同的属性从上下文中读取它们。( Context.Products )你用来写的。