2015-12-18 85 views
1

我需要一些幫助來理解我們試圖在實體框架中解決的情況。實體框架6-保存交易中的數據

我們正在努力更新兩個表 1.映射表(兩個外鍵=產品編號和anotherId) 2.在表中創建一個新的記錄(在產品和生成的主鍵調用是productId參數)

我們希望確保成功更新產品表和映射表,或者確保交易角色返回。

我們使用一個單一的交易爲

using (var context = new SomeContext()) 
{ 
    using (var dbContextTransaction = context.Database.BeginTransaction()) 
    { 
     try 
     { //Create the record to be saved 
      var product = new Product{ // set the data} 
      var newProductId = context.SaveChanges(); 

      //Update the Mapping Table 
      var anotherData = context.AnotherTable.where(x => x.id = anotherId).FirstOrDefault(); 
      var productData = context.Product.where(x => x.id = newProductId).FirstOrDefault(); 

      //Create the Mapping Table record 
      productData.AnotherDatas.Add(anotherData); 
      context.SavceChanges(); 

      dbContextTransaction.Commit(); 
     } 
     catch (Exception) 
     { 
      dbContextTransaction.Rollback(); 
     } 
    } 
} 

但問題是,

var productData = context.Product.where(x => x.id = newProductId).FirstOrDefault(); 

回來爲空我是這樣假設是由於該事務未提交。

如何克服這種情況? 如何創建映射記錄並使用新創建的ID? 在同一個事務中運行多次保存是否會導致錯誤?

回答

2

您應該添加product上下文進行保存:

context.Product.Add(product); 
context.SaveChanges(); 

而且SaveChanges()收益計算的更改的記錄,所以找上product.id保存它後檢索插入的記錄ID。

+0

感謝好友......我正在添加產品的上下文,但我認爲我的腦袋都被淹沒了,我期待保存返回Id並沒有意識到它。我的數據還有另外一個問題,就是我的表只有外鍵,而實體框架把它當作一個視圖對待,並且不讓我更新它......這是有道理的..我總是需要將主鍵添加到我的映射中,修復。 – fireholster

+0

@fireholster,沒問題!如果數據沒有唯一標識符,EF可能會錯誤地工作,即使調用了視圖。此鏈接可能會有幫助:http://girlfromoutofthisworld.com/entity-framework-and-setting-primary-keys-on-views/ –