我有表entry
和表type
。一個entry
有一個type
一個類型可以在許多條目中(n對1關係)。該類型顯示在可編輯的組合框中。如果用戶輸入一個尚不存在的類型,則應該創建該類型,並且相關的entry
的type
應該更新爲新的類型實體。添加新的子實體並更新父實體
如何加載項(熱切加載):在所有現有各類
<Combobox IsEditable="True"
ItemsSource="{Binding AllTypes, Source={StaticResource typeTableController}}"
SelectedValue="{Binding Path="Entry.type"}" />
typeTableController
有一個屬性(AllTypes
):
var entries = dbContext.entry.Include(entry => entry.type).ToList();
我如何綁定類型的組合框D B。 Entry
是當前選擇的entry
。用戶現在可以編輯ComboBox文本。如果他按下「保存」按鈕,則應該將該類型添加到數據庫(如果尚未存在),或者應該在存在的情況下選擇它。並且應該保存更新的條目。如果我不必自己處理每個房產,那將是非常好的,因爲type
不是我唯一的房產。
我的第一個方法:
dbContext.Set(entry.getType()).Attach(entry);
dbContext.SaveChanges();
- >出現InvalidOperationException:參照完整性約束違規
或
dbContext.Entry(formEntry.type).State = EntityState.Added;
dbContext.Set(entry.getType()).Add(entry);
dbContext.SaveChanges();
- >添加新type
到類型表,但也複製類型/入口表中的所有類型和條目(這對於我),只更新現在兩個現有的entries
之一的類型到新的type
。因此,如果有前10種,現在有21
編輯:我的條目:
public partial class entry
{
...
public Nullable<int> type_id { get; set; }
...
public virtual type type { get; set; }
}
重要: 我總是得到崩潰,當我嘗試
dbContext.Entry(entry).State = EntityState.Modified;
原因是,我的調試器監視列表中有entry
。看來這會導致一些衝突。刪除它可以解決這個問題。
隨着代碼的添加,將添加新類型。但是該條目的外鍵在db中沒有更新。我不確定你的意思是「分離」。我不在加載條目時創建的上下文中。 – L3n95
@ L3n95你的意思是'entry.typeId'外鍵?通常EF在處理導航屬性 –
時應該處理此問題。在更新之前:entry.type_id = 55,entry.type.id = 0;更新後:entry.type_id = 55,entry.type.id = 56 – L3n95