你能在实体框架中的ICollection <myobject>旁边有一个ICollection <int>吗?</myobject> </int>

时间:2012-02-05 15:51:35

标签: asp.net-mvc entity-framework

我知道在实体框架中你可以做类似

的事情
public MyObject myObj {get;set;}
public int myObjId {get;set;}

使我能够访问密钥或相应的对象。但是,你可以为1.M协会做点什么吗?

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

如果可以的话会非常有用。

1 个答案:

答案 0 :(得分:1)

不,你不能。至少在某种意义上,当您从内存加载对象时,EF会自动为您填充密钥集合(就像外键属性一样)。

但您有两种选择:

您可以创建只读属性:

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

这要求您已加载myObj集合或使用延迟加载。

第二种方法是在需要时明确地加载Ids:

IEnumerable<int> myObjIds = context.Parents
    .Where(p => p.Id == 1)
    .Select(p => p.myObj.Select(o => o.Id))
    .Single();
相关问题