2011-05-19 70 views
0

我在Visual Studio 2008中使用ASP.NET MVC2我相信,SQL Server是2005錯誤在ASP.NET中插入與外鍵數據到SQL Server數據庫(沒找到主鍵)

我有兩個表:EquipmentInventory和EquipmentRequested

  • EquipmentInventory具有SCODE的主鍵
  • EquipmentRequested具有基於在EquipmentInventory SCODE稱爲SCODE一個 外鍵。

我想下面的代碼(大量的非培訓相關的代碼刪除):

 try 
     { 
      EChODatabaseConnection myDB = new EChODatabaseConnection(); 

//this section of code works fine. The data shows up in the database as expected 
      foreach (var equip in oldData.RequestList) 
      { 
       if (equip.iCount > 0) 
       { 
        dbEquipmentInventory dumbEquip = new dbEquipmentInventory(); 
        dumbEquip.sCode = equip.sCodePrefix + newRequest.iRequestID + oldData.sRequestor; 
        myDB.AddTodbEquipmentInventorySet(dumbEquip); 
       } 
      } 

      myDB.SaveChanges(); //save this out immediately so we can add in new requests 

//this code runs fine 
      foreach (var equip in oldData.RequestList) 
      { 
       if (equip.iCount > 0) 
       { 
        dbEquipmentRequested reqEquip = new dbEquipmentRequested(); 
        reqEquip.sCode = equip.sCodePrefix + newRequest.iRequestID + oldData.sRequestor; 
        myDB.AddTodbEquipmentRequestedSet(reqEquip); 
       } 
      } 

//but when I try to save the above result, I get an error 
      myDB.SaveChanges(); 

OLDDATA被傳遞給函數。 newRequest是添加到「非相關」表的結果。 newRequest.iRequestID確實有一個值。

在看reqEquip是觀察窗口,我注意到EquipInventory爲空。

我收到的錯誤信息是: 「在‘EChODatabaseConnection.dbEquipmentRequestedSet’參加‘FK_EquipmentRequested_EquipmentInventory_sCode’關係的實體相關的0‘EquipmentInventory’被發現1‘EquipmentInventory’的預期。」。

顯然我做錯了事,但到目前爲止,我似乎無法找到我有什麼問題。

任何人都有關於如何正確插入記錄到具有外鍵引用的表的提示?

UPDATE:
我使用的數據實體框架。

UPDATE:
多虧了羅布的回答,我能找出我的錯誤。 正如Rob所說,我需要爲外鍵設置我的參考。

我的編碼結果如下:

  foreach (var equip in oldData.RequestList) 
      { 
       if (equip.iCount > 0) 
       { 
        dbEquipmentInventory dumbEquip = new dbEquipmentInventory(); 
        dumbEquip.sCode = equip.sCodePrefix + newRequest.iRequestID + oldData.sRequestor; 
        myDB.AddTodbEquipmentInventorySet(dumbEquip); 

        //add in our actual request items 
        dbEquipmentRequested reqEquip = new dbEquipmentRequested(); 
        reqEquip.EquipmentInventory = dumbEquip; 
        myDB.AddTodbEquipmentRequestedSet(reqEquip); 
       } 
      } 

      myDB.SaveChanges(); 

有誰看到這樣做的更好的方法?

回答

0

你作爲一個ORM使用什麼?我相信無論你使用哪一個,你都可以使用大多數ORM的外鍵處理來爲你處理。例如,你做了一個新的dumbEquip,不要立即保存。做你的dbEquipmentRequested reqEquip = new dbEquipmentRequested();並將數據添加到它,然後說dumbEquip.dbEquipmentRequested.Add(reqEquip)。然後保存記錄,並且ORM應該按照FK所需的正確順序保存記錄,甚至將FK ID輸入到reqEquip記錄中。

+0

我正在使用數據實體框架。 – 2011-05-19 15:46:41

+0

這幫助我弄清楚我做錯了什麼。 – 2011-05-19 16:15:31