我在設置關聯不包含所有主鍵值的兩個表之間的實體框架中關聯時遇到問題。與實體框架的非鍵控關聯
例如我有兩個表(這是一個人爲的例子,但足以代表我的,我不能改變實際的數據庫)
------Items------ ---Orders----
----------------- -------------
* ItemId - * OrderId -
* EffectiveDate - - OrderDate -
- Name - - ItemId -
----------------- ------------- * denotes primary key field
理想情況下,我想對訂單的屬性,表示這是有效的訂購日期的項目,但是我可以與Order中的一個關聯一起生活到一個Items集合中,然後在Order上創建一個只讀屬性來選擇正確的Item。
編輯:數據庫和模型將是隻讀的,所以只讀解決方案是好的。
這是可能的實體框架? (或甚至LINQ to SQL?)
我相信有可能使用NHibernate(任何人都可以確認嗎?)但我一直用實體框架敲擊磚牆。到目前爲止,我所管理的唯一解決辦法是建立在部分類的屬性對於使用「hack」從訂單直接訪問的ObjectContext和查詢context.Items收集這樣
private IEnumerable<Item> Items
{
get
{
var ctx = this.GetContext();
return from i in ctx.Items where i.ItemId == this.ItemId select i;
}
}
public Item Item
{
get
{
return (from i in Items
where i.EffectiveDate <= this.OrderDate
orderby i.EffectiveDate ascending
select i).First();
}
}
順序是有更好的解決方案?
謝謝,這正是我所懷疑的,但我覺得奇怪的是,實質上簡單的SQL連接會給實體框架帶來很多麻煩。 – Eamon 2011-04-21 11:43:20
連接可能是可能的,但整個實體將變爲只讀(不更新,刪除,插入)。 – 2011-04-21 12:11:02
我應該補充說我正在創建一個只讀模型(我會更新Q)。應用程序根本不會寫入這個特定的數據庫,所以只讀集合將非常適合這種情況。 – Eamon 2011-04-21 22:59:13