Я только что перевел свое решение EF 4.0 для использования EF 4.1 Code-First. Все прошло гладко, и я смог получить данные из БД и показать их в своем проекте Silverlight с помощью WCF RIA Services 1.0SP2-RC за пару часов.
Единственная проблема возникает, когда я пытаюсь загрузить ссылки в моей службе домена. Я добавил атрибут [Включить] в свой справочный объект. Кроме того, я включил отложенную загрузку для моего DbContext. Но все же следующий метод ничего не возвращает (следующий работает на Ef 4.0, но не на 4.1):
public IEnumerable<Bar> GetBarsInFoo (int fooId, bool direction)
{
var foo = this.DbContext.Foos.FirstOrDefault(f => f.FooId == fooId);
var Bars = foo.Bars.Where(b => b.Direction == direction).ToList();
return Bars;
}
Итак, я должен проверить и посмотреть, не включена ли указанная коллекция, а затем загрузить ее:
public IEnumerable<Bar> GetBarsInFoo (int fooId, bool direction)
{
var foo = this.DbContext.Foos.FirstOrDefault(f => f.FooId == fooId);
// Additional code to load the relation.
if (!this.context.Entry(foo).Collection(f => f.Bars).IsLoaded)
{
this.context.Entry(foo).Collection(f => f.bars).Load();
}
var Bars = foo.Bars.Where(b => b.Direction == direction).ToList();
return Bars;
}
Приведенный выше код возвращает результаты правильно.
Проблема в том, что мне нужно изменить многие части моего кода, если я хочу решить эту проблему, как я уже упоминал.
Вот мои определения сущностей:
public partial class Foo
{
[Key]
public int FooId {get; set;}
[Include]
[Association("Foo_Bar", "FooId", "FooId")]
[Display(AutoGenerateField = false)]
public virtual ICollection<Bar> Bars { get; set; }
}
public partial class Bar
{
[Key]
public int BarId {get; set;}
[Display(AutoGenerateField = false)]
public int FooId { get; set; }
[Include]
[Display(AutoGenerateField = false, Name = "In Foo", Order = 12)]
[Association("Foo_Bar", "FooId", "FooId", IsForeignKey = true)]
[ForeignKey("FooId")]
public virtual Foo Foo { get; set; }
}
Можно ли как-нибудь разрешить EF обрабатывать загрузку отношений без проверки?