2012-02-05 75 views
0

我知道在實體框架,你可以做這樣的事情您可以在實體框架中使用ICollection <int>以及ICollection <myobject>嗎?

public MyObject myObj {get;set;} 
public int myObjId {get;set;} 

提供我訪問無論是鍵或相應的對象。但是,你可以做一些類似1.M協會的事情嗎?

public ICollection<MyObject> myObj {get;set;} 
public ICollection<int> myObjIds {get;set;} 

如果可以,將會非常有用。

+0

我不知道爲什麼會是這樣有用嗎?你的每個物體都不在他們身上有一個ID嗎? 如果你需要計算一些東西,你可以隨時在你的getter函數中添加代碼,它會爲你填充。 – synepis 2012-02-05 16:51:40

回答

1

不,你不能。至少從EF的意義上說,當你從內存加載對象時,EF會爲你自動填充密鑰集合(就像外鍵屬性一樣)。

但是你有兩個備選方案:

您可以創建一個只讀屬性:

public ICollection<MyObject> myObj {get;set;} 
public IEnumerable<int> myObjIds 
{ 
    get { return myObj.Select(o => o.Id); } 
} 

這就要求你要麼已經加載了myObj集合或使用延遲加載。

第二種方式是顯式地加載ID時,你需要他們:

IEnumerable<int> myObjIds = context.Parents 
    .Where(p => p.Id == 1) 
    .Select(p => p.myObj.Select(o => o.Id)) 
    .Single(); 
相關問題