[英]How to POST OData entity and link it to multiple existing entities at the same time?
[英]Disconnected entities with multiple “children reference” to the same already existing entity
當我嘗試為實體集合設置對同一外鍵的引用時,我遇到了斷開連接的實體的問題。 我在這里寫了一個簡單版本的代碼(這個版本沒用,但是給出了同樣的錯誤):
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();
}
奇怪的行為是關於
項(addebito).STATE
如果我只使用一個“soggiorno”(即在第一個聲明中我把i <1)完全沒有問題。 但如果我需要不止一個“soggiorno”,它會給我錯誤:
保存或接受更改失敗,因為Chameleon2.DB.Addebito類型的多個實體具有相同的主鍵值。
當然它們具有相同的主鍵,它們必須具有相同的鍵,因為每個“soggiorno”必須引用相同的外鍵。 我知道我可以通過一種解決方法得到類似的結果,但我想知道為什么它不起作用。 謝謝!
最后我得到了答案。 我在這里寫,也許它對其他人有用。 這里的問題不是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);
}
一切都會完美地運作......缺乏經驗......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.