У меня есть некоторые объекты POCO, которые выглядят примерно так:Как использовать/перенести объектные отношения POCO в EF?
public class Foo
{
public int Id { get; set; }
public string FooProperty { get; set; }
public int BarId { get; set; }
public virtual Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
public string BarProperty { get; set; }
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
}
Каждый объект Foo имеет ровно один бар (и наоборот).
Теперь я хочу создать новую пару объектов Foo/Bar. Так что я делаю это (и это, где я подозреваю, что я буду не права):
var foo = new Foo() { FooProperty = "hello" };
dbContext.Foos.Add(foo);
var bar = new Bar() { BarProperty = "world" };
foo.Bar = bar;
dbContext.SaveChanges();
Как вы можете сказать, я надеюсь, что, потому что я «добавил» foo
, затем bar
также будет добавлен, потому что это часть одного и того же графа объектов, но нет: он не добавлен - и ни один из FooId
объекта Bar
не обновлен после вызова SaveChanges
(хотя объекта Foo обновлен).
Итак, я предполагаю, что это поведение связано с тем, что я имею дело с объектами POCOs, а не с EF-прокси, и поэтому для этой работы нет «сантехники». Я мог бы получить Id
от объекта Foo
и вручную занести его в объект Bar
(и наоборот) и сделать еще несколько звонков на SaveChanges
, но, очевидно, это не тот путь.
Итак, по-видимому, мне нужно создать объекты-прокси EF, а не голые объекты POCO. Каков наилучший способ сделать это?
Там нет «ошибки», но таблицы БД не обновляются как я и хотел, а также объекты POCO обновлены. –
Вы выполнили настройку в объекте DbContext, чтобы связать свойства BarId и Virtual Bar вместе? Я подозреваю, что в вашей базе данных есть дополнительные поля, такие как 'Foo_Id', а также ваш' FooId', если у вас нет – Richard
Да, я немного использовал HasRequired/WithRequired. –