EF код сначала присоединить и создать прокси - PullRequest
4 голосов
/ 17 мая 2011

Допустим, у меня есть сущность Foo.

public class Foo
{
  public int Id {get;set;}
  public virtual ICollection<Bar> Bars {get;set;}
}

Когда я получаю эту сущность из БД, я на самом деле получаю прокси, и все работает, как должно быть.

Но могу ли я присоединить Foo к DbContext и создать прокси вручную, чтобы Bars не возвращал null после присоединения, а фактическую коллекцию баров?

Значение

var foo = new Foo { Id = 1 };
Context.Set<Foo>().Attach(foo);
foo = CreateProxyOf(foo);
var countOfBars = foo.Bars.Count();

Есть что-то вроде CreateProxyOf?

Ответы [ 2 ]

6 голосов
/ 17 мая 2011

Да, есть способ, но вместо конструктора Foo вы должны использовать:

var set = Context.Set<Foo>();
var foo = set.Create();
foo.Id = 1;
set.Attach(foo);
var countOfBars = foo.Bars.Count();
0 голосов
/ 17 мая 2011

Когда вы получаете все Foos или один Foo, вы можете сказать EF получать бары одновременно. Например:

var foos = db.Foos.Include("Bars");

var foo = db.Foos.Include("Bars").Single(f => f.Id == 1);

Подробнее о MSDN здесь

http://msdn.microsoft.com/en-us/library/bb896272.aspx

...