Рассмотрим следующий пример:Посевные элементы с отношениями
public class Foo
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Something { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
}
public class Bar
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Something { get; set; }
[ForeignKey("Foo")]
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
}
Теперь в моем контексте, я хочу посеять некоторые Foo
S с соответствующими Bar
с:
context.Foos.AddOrUpdate(
r => r.Name,
new Foo
{
Name = "Foo 1",
Something = "Blah",
Bars = new List<Bar>
{
new Bar { Name = "Foo 1 Bar 1", Something = "Blah" },
new Bar { Name = "Foo 1 Bar 2", Something = "Blah" },
new Bar { Name = "Foo 1 Bar 3", Something = "Blah" },
}
},
...
Если я бегу Update-Database
все работает вы бы ожидали, и я получаю связанные с ними Bar
s для каждого Foo
.
Теперь, если я пойду и изменить свои данные семенных на что-то вроде:
context.Foos.AddOrUpdate(
r => r.Name,
new Foo
{
Name = "Foo 1",
Something = "BlahBlahBlah",
Bars = new List<Bar>
{
new Bar { Name = "Foo 1 Bar 1", Something = "BlahBlahBlah" },
new Bar { Name = "Foo 1 Bar 2", Something = "BlahBlahBlah" },
new Bar { Name = "Foo 1 Bar 3", Something = "BlahBlahBlah" },
}
},
...
И запустить Update-Database
раз, Foo
s обновляется, но все Bar
с еще будет «Бла» для их Something
Недвижимость. Это имеет смысл, поскольку для Entity Framework нет логичного способа узнать, какой Bar
должен быть обновлен, но есть ли какое-либо обходное решение? Возможно, каким-то другим способом я могу добавить Bar
s, а также сохранить их связанными с Foo
s? Я знаю, что я мог бы просто сделать:
context.Bars.AddOrUpdate(
r = r.Name,
new Bar
{
...
},
...
Но, учитывая, что я использую столбцы идентификации в качестве ключей, у меня нет никакого способа знать, какие Bar
s добавить к какому Foo
s. Есть идеи?