2012-04-06 54 views
2

我正在使用ADO.NET實體框架在C#中開發應用程序。如何將項目添加到ADO.NET實體框架中的實體

在網上我看到的是,爲了添加元素,newProduct,一個實體的許多例子,讓我們假設Product,它使用了下面的代碼:

context.Products.Add(newProduct); 

的方法添加,但是,它不是Products的成員,所以我不能使用它。也許在例子中使用的EF是LinqToSQL。

然而,在ADO.NET有一個方法AddObject

context.AddObject("Products", newProduct) 

和它的作品,但我不喜歡它的原因有兩個:

1)我儘量避免多儘可能魔術字符串除非他們真的是唯一實施功能的手段

2)它給出void作爲返回類型,如何檢查插入是否良好?

我相信有另一種方式來插入我的實體。任何人都可以幫忙?

回答

4

1)我儘量避免儘可能多的魔法字符串,除非它們是 真正唯一的手段來實現的功能

如果contextObjectContext(EF < = 4.0),你應該通常在派生的上下文中有一個成員,代表ObjectSet<Product>,名稱Products或類似。您可以使用,那麼:

context.Products.AddObject(newProduct); 

即使你沒有在你的背景下這樣一組還有另外一個強類型的選項:

context.CreateObjectSet<Product>().AddObject(newProduct); 

2)它給空當一回類型,我如何檢查插入 是否好?

AddObject不會將INSERT插入到數據庫中。它只會將對象置於objectContext中的Added狀態。當您撥打SaveChanges時,真正的INSERT將在一筆交易中發生。

儘管如此,AddObject可能會失敗,也許如果您將具有相同密鑰的兩個對象添加到上下文中(如果您的實體沒有爲該密鑰自動生成身份)或其他原因。如果是這樣,AddObject會拋出一個你不應該捕獲的異常,因爲它通常表示你的代碼中存在嚴重的問題或錯誤。

SaveChanges返回int。但這int並不表示SaveChanges和插入您的對象是成功的。它只計算在語句執行前有Added狀態(將導致INSERT語句),Modified狀態(將導致UPDATE語句)和Deleted狀態(將導致DELETE語句)的數量對象。

同樣,如果任何SQL語句(如INSERT)不成功,SaveChanges將引發異常。這個異常可以表示客戶端已經存在的問題,或者它可以告訴你在SQL操作期間發生了問題 - 例如:對於失敗的INSERT,異常可能會給你一條消息,說明INSERT失敗了,因爲已經有了一行關鍵字你想插入到數據庫中,或者需要不可爲空的列沒有被填充到你想要插入的實體中,等等。由於併發問題的異常在許多其他異常類型中也是可能的。

您可以檢查是否成功通過捕獲可能出現的異常SaveChanges

try 
{ 
    int numberOfObjects = context.SaveChanges(); 
} 
catch (SomeExceptionType e) 
{ 
    // What now? 
} 

BTW:該context.Products.Add(...)你見過最有可能是一個例子,其中contextDbContext(EF> = 4.1)。 DbContext是一個簡化的API到實體框架(它仍然使用核心ObjectContext下)。在此API中,插入新實體的方法實際上被稱爲Add(方法DbSet<T>)而不是AddObject

+0

嗯,我能說什麼......這是一個答案的地獄。非常感謝您的時間 – CiccioMiami 2012-04-07 03:47:55