3 способа добавления «Продукта» через Entity Framework. Какая разница? - PullRequest
9 голосов
/ 11 мая 2010

Чтение этой статьи 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?

Спасибо, Кохан

1 Ответ

9 голосов
/ 11 мая 2010

Все они делают одно и то же, с небольшими различиями в синтаксисе.

Во-первых, давайте посмотрим на 3,5 пути и «ваш путь». Если вы посмотрите на файл codegen для вашего EDMX, вы увидите что-то вроде:

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

Таким образом, эти два метода абсолютно одинаковы, за исключением того, что магическая строка в вашем коде заменяется версией с кодовым кодом, которая никогда не может ошибаться.

.NET 4 way делает то же самое, но делает это по-другому. Он использует строго типизированный ObjectSet<T>, что позволяет динамически создавать строго типизированную ссылку, но без использования строк. В случае добавления объекта в контекст, однако, я не знаю реального преимущества, за исключением того, что оно позволяет вам быть более последовательным в отношении ваших ссылок на сущности - вы читаете их из контекста, используя то же свойство (Context.Products), который вы используете, чтобы написать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...