2011-04-11 29 views
5

我有一個表「JobOrder」,它使用正常的EF調用添加到數據庫中。
在我的數據庫,我有JOB_ID爲主鍵&自動增加價值,所以我並不需要設置它的EF模型默認值0
但我需要的是已插入JOB_ID的在我調用SaveChanges()之後將數據發送到數據庫。
我嘗試使用刷新(),但它沒有工作,JOB_ID爲新插入的對象仍然是0。EF不更新最近添加到數據庫的對象的主鍵

using (ObjContext context = new ObjContext()) 
{ 
    context.AddToJobOrder(order); 
    context.SaveChanges(); 
    context.Refresh(RefreshMode.StoreWins, order);    //TRIED THIS 
    context.Refresh(RefreshMode.StoreWins, context.JobOrder); //TRIED THIS TOO 
} 

我都嘗試調用如上所述,但還是我最後不得不JOB_ID爲0。
任何幫助將不勝感激。

+0

您是否從設計人員的常規方式生成模型,而不是手動調整它? SaveChanges()是否將數據寫入數據庫? – 0x49D1 2011-04-11 07:33:26

+0

是的,我使用嚮導生成它。不做任何更改的XML。是的,SaveChanges()確實將數據寫入數據庫。 – Rahul 2011-04-11 08:21:58

回答

1

在正常情況下,你不需要Refresh方法。新插入的訂單context.SaveChanges()後必須有其正確的order.Job_id。當然,如果你有MSSQL數據庫..在其他情況下,供應商可能會有一些未實現的東西,現在幾乎所有主要的數據庫供應商都至少有正常的數據庫供應商測試版,並支持常見的EF功能。
PS在網絡上也有很多類似的問題,也在堆棧溢出中。例如,請參閱this

1

將對象添加到上下文時,它應該正確填充ID字段。

所以試試這個,設置一個斷點,你會看到主鍵ID設置正確。

using (ObjContext context = new ObjContext()) 
{ 
    context.AddToJobOrder(order); 
    context.SaveChanges(); 

    //Breakpoint here, and see that Job_id has been populated. 
    Debug.WriteLine(order.Jod_id); 
} 

只有.SaveChanges做的主鍵獲取設置,因爲它有去數據庫,並尋找下一個數值。

0

確保它的StoreGeneratedPattern屬性設置爲中的標識 CSDL和SSDL。設計人員僅顯示CSDL屬性,因此您可能需要在XML編輯器中打開它以查看和編輯SSDL,或者使用同步工具(例如my add-in模型比較器用於EF4)來保留DB/SSDL/CSDL同步。

+1

是的克里斯,你是對的。我已更新數據庫,但型號未更新。 – Rahul 2011-04-12 04:45:22

相關問題