假設下表實體框架非典型1- [0..1] - 模型只有協會 - EF LINQ選擇可能性
ParentEntities
ParentID
ChildEntities
ChildID
ParentID
這些表沒有FK架構中定義。
在EF設計,從數據庫生成後,我添加關聯:
- 家長多重性:1
- 兒童多重性:0或1
當我建,我得到的錯誤:「錯誤3027:無以下的EntitySet/AssociationSet指定映射 - 父子」
但是,如果我嘗試配置了這樣的關聯表映射..
Maps to ChildEntities
Parent
ParentID <-> ParentID (parent entity prop <-> child table column)
Child
ChildID <-> ChildID (child entity prop <-> child table column)
..我得到這個:錯誤3007:從行xxx,xxx開始映射片段時出現問題:列[ParentID]正在被映射到兩個片段中不同的概念側屬性。
爲什麼這是一個錯誤沒有意義。當前實施的限制?
[編輯1]
我能夠通過創建一個1-N的關聯,使這項工作。這是不理想,但它的工作原理完全一樣,只需要在局部添加只讀子屬性:
public partial class Parent
{
public Child Child { get { return Childs.Any() ? null : Childs.First(); } }
}
這似乎是對我最好的解決方案。我不得不添加一個FK到數據庫來獲得EF來生成關聯和導航屬性,但是一旦它被添加,我就能夠刪除FK,並且從數據庫進一步更新到模型並沒有刪除關聯或導航屬性。
[編輯2]
因爲我是研究如何解決不關心該協會在EF建模,我遇到了另一個問題。取而代之的是隻讀子屬性的我做到了正常..
public partial class Parent
{
public Child Child { get; set; }
}
..但現在我需要一種方式來兌現,從查詢:
var query = from parents in context.Parents
// pointless join given select
join child in context.Childs
on parents.ParentID equals child.ParentID
select parents;
我可以選擇匿名鍵入..
// step 1
var query = from parents in context.Parents
join child in context.Childs
on parents.ParentID equals child.ParentID
select new { Parent = parents, Child = child };
..但後來我不得不消耗更多次獲得該到我的實體:
// step 2
var results = query.Select(x => {
var parent = x.Parent;
parent.Child = x.Child;
return parent; });
有沒有更好的/簡化的方式來從查詢選擇這樣做,EF物化器可以從一開始就做到這一點?如果不是,那麼我會訴諸編輯1的方法論。
如果您轉到模型瀏覽器 - > Model.Store,該關係可能與您在Model下的關係不同,只需刪除Model.Store表並重新添加即可。 – 2013-04-29 20:13:15
@鮑勃,不知道我跟着。如何刪除然後重新添加商店表(哪一個?)改變任何東西?我從DB中添加了兩個表,並且表之間沒有內在關係(模型中也沒有)。這裏是我的model.store的圖像http://j.mp/ZgE29p – JoeBrockhaus 2013-04-29 20:29:19
有一個EF錯誤,當你改變模型時,它不喜歡刷新EDMX的'.Store'。所以你必須找到一種方法來刷新它。 –
2013-04-29 20:46:35