当我尝试为实体集合设置对同一外键的引用时,我遇到了实体断开的问题。我在这里编写了一个简单的代码版本(这个代码没用,但是给出了相同的错误):
Prenotazione prenotazione = new Prenotazione();
prenotazione.Soggiorni = new List<Soggiorno>();
for (int i = 0; i < 3; i++)
{
Soggiorno soggiorno = new Soggiorno();
soggiorno.Addebiti = new List<Addebito>();
prenotazione.Soggiorni.Add(soggiorno);
for (int j = 0; j < 3; j++)
{
soggiorno.Addebiti.Add(new Addebito { AddebitoID = 1 });
}
}
using (HotelContext context = new HotelContext())
{
context.Prenotazioni.Add(prenotazione);
foreach (Soggiorno soggiorno in prenotazione.Soggiorni)
{
foreach (Addebito addebito in soggiorno.Addebiti)
{
context.Entry(addebito).State = System.Data.Entity.EntityState.Unchanged;
}
}
context.SaveChanges();
}
奇怪的行为是关于
Entry(addebito).State
如果我仅使用一个“ soggiorno”(即在第一个for语句中,我输入i <1),则完全没有问题。但是,如果我需要多个“ soggiorno”,则会出现以下错误:
保存或接受更改失败,因为多个类型的Chameleon2.DB.Addebito'实体具有相同的主键值。
当然,它们具有相同的主键,它们必须具有相同的键,因为每个“ soggiorno”都必须引用相同的外键。我知道通过解决可以得到类似的结果,但是我想了解为什么它不起作用。谢谢!
答案 0 :(得分:0)
最后我得到了答案。我在这里写,也许对其他人有用。这里的问题不是AddebitoID的重复ID,而是我创建Addebito对象的方式。为了解决该问题,您必须使用两个dbContext:
如果我写过:
Addebito addebito;
using (HotelContext context = new HotelContext())
{
addebito = context.Addebito.Find(3);
}
for (int j = 0; j < 3; j++)
{
soggiorno.Addebiti.Add(addebito);
}
一切都可以正常运行...缺乏经验...