2012-02-05 2 views
0

Я знаю, что в рамках сущности вы можете сделать что-то вродеУ вас есть ICollection <int> рядом с ICollection <myobject> в 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;} 

Было бы очень полезно, если можно.

+0

Я не уверен, почему это будет полезно? Не у каждого из ваших объектов есть ИД внутри них? Вы всегда можете добавить код к своей функции getter, который заполнит это для вас, если вам нужно что-то вычислить. – synepis

ответ

1

Нет, вы не можете. По крайней мере, не в том смысле, что EF автоматически заполняет коллекцию ключей для вас, когда вы загружаете объект из памяти (как в случае с свойствами внешнего ключа).

Но у вас есть два альтернативных варианта:

Вы можете создать только для чтения свойства:

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

Это требует, чтобы вы либо уже загрузили myObj коллекцию или использовать отложенную загрузку.

Второй способ заключается в загрузке идентификаторами явно, когда вы нуждаетесь в них:

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