您必须检查数据库中是否已经存在具有给定名称的宠物。EF不会自动这么做。您可以通过对所有宠物的单个查询执行此检查,并替换您的
person.Pets
已装载现有宠物的集合:
Person person... // your new person with a collection of pets
using (var ctx = new MyContext())
{
var pets = person.Pets;
var petNames = pets.Select(p => p.Name);
person.Pets.Clear();
var existingPetsDict = ctx.Pets
.Where(p => petNames.Contains(p.Name))
.ToDictionary(p => p.Name);
foreach (var pet in pets)
{
Pets existingPet;
if (existingPetsDict.TryGetValue(pet.Name, out existingPet))
person.Pets.Add(existingPet);
else
person.Pets.Add(pet);
}
ctx.Persons.Add(person);
ctx.SaveChanges();
}