При чтении этой статьи MSDN, названной, "Работая с ObjectSet (Платформа Объекта)", Это показывает два примера о том, как добавить продукт.. один для 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?
Спасибо, Kohan
Все они делают одно и то же, с небольшими различиями в синтаксисе.
Во-первых, давайте посмотрим на путь 3.5 и «ваш путь». Если вы посмотрите файл кодогенерации для вашего EDMX, вы увидите что-то вроде:
public void AddToProducts(Product product)
{
base.AddObject("Products", product);
}
Итак, эти два метода абсолютно одинаковы, за исключением того, что волшебная строка в вашем коде заменена версией, созданной с помощью кода, которая никогда не может быть ошибочной.
".NET 4 way" делает то же самое, но по-другому. Он использует строго типизированный ObjectSet
, который позволяет динамически создавать строго типизированную ссылку, но без использования строк. Однако в случае добавления объекта в контекст нет реального преимущества, о котором я знаю, за исключением того, что он позволяет вам быть более последовательным в том, как вы ссылаетесь на свои сущности - вы читаете их из контекста, используя то же свойство ( Context.Products
), которые вы используете для их записи.