簡體   English   中英

已斷開連接的實體,其中多個“子級引用”到同一個已存在的實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM