在實體框架4中,我的數據庫模型中有兩個表(我們稱它們爲Info
和Data
),它們映射到實際的數據庫表。在Info
表中,有一個將兩個錶鏈接在一起的DataId
列(表格始終爲1:1)。在桌子上在實體框架中使用一個存儲過程來插入兩個表
重要的列有:
信息:
- 編號
- 數據ID =>鏈接到Data.id
- Property1
- Property2
數據:
- ID =>鏈接到Info.DataId
- 的Xml
- Property1
我寫的存儲過程來插入數據。此過程首先插入一行到Data
(這樣我可以得到Data.id
值),然後在Info
中插入一行。當我撥打context.SaveChanges()
時,它會在代碼中調用。
我將此存儲過程設置爲在XmlDataInfo
上完成插入時運行,因爲它包含除Data.Xml
之外的所有過程需要的字段。
我遇到因爲Data.Xml
在不同的表是兩個問題...
如果我不設置/更改
Data.Xml
的INSERT
正常運行我的存儲過程。當我設置該值時,實體框架也會嘗試在Data
表上執行插入操作。我只希望它運行我的存儲過程調用(在Info
表上),它插入到兩個表中。我需要設置Data.Xml
,因爲我的過程需要這個值,所以我不能讓它爲NULL。我無法弄清楚如何在存儲過程映射中設置
Data.Xml
值。它不允許我選擇要在屬性下拉列表中使用的屬性的子元素。
我看到了一些建議,在代碼上Info
創建一個部分類,我能做到這一點的代碼來訪問此屬性但部分類屬性是不可用的模型,所以我還是不能選擇它作爲映射屬性。
這就是我的問題。我還沒有做過很多EF的工作,所以也許有一些我錯過了或者做錯了。
這似乎應該有某種方式我可以映射信息上的字段,可以獲取/設置Data.Xml
,然後調用我的過程,而不嘗試在Data
表上執行插入操作。我希望我可以添加某種只有代碼屬性的Info模型,我可以得到這個值,但我無法找到一種方式來做到這一點,它可以在存儲過程映射中訪問。
EF中正確的1:1關聯。你應該放棄'Info.DataId'。 'Data.Id'應該指'Info.Id'(使Info'成爲原理)。 *或*'Info.Id'應該引用'Data.Id'(使'Data'成爲原則)。 –