【发布时间】:2017-03-29 07:41:36
【问题描述】:
我有一张桌子entry 和一张桌子type。一个entry 有一个type 一个类型可以在许多条目中(n 对1 关系)。该类型显示在可编辑的 ComboBox 中。如果用户输入的类型尚不存在,则应创建该类型,并将相关 entry 的 type 更新为新的类型实体。
我如何加载条目(急切地加载):
var entries = dbContext.entry.Include(entry => entry.type).ToList();
我如何将类型绑定到 Combobox:
<Combobox IsEditable="True"
ItemsSource="{Binding AllTypes, Source={StaticResource typeTableController}}"
SelectedValue="{Binding Path="Entry.type"}" />
typeTableController 有一个属性 (AllTypes) 包含数据库中的所有现有类型。 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 添加到类型表中但也复制类型/条目表中的所有类型和条目(这对我来说真的很奇怪)并且只更新现在两个现有 @987654337 之一的类型@给新的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。似乎这会导致一些冲突。删除它可以解决这个问题。
【问题讨论】:
标签: c# entity-framework combobox foreign-key-relationship invalidoperationexception