我正在尝试构建我的第一个 EntityFramework Code First 应用程序。它是一个 WPF 应用程序。因此我实现了一个小型测试模型。一个俱乐部可以有很多竞争对手,而一个竞争对手必须有一个俱乐部,所以在我看来,这看起来像是标准的 1:n 关系。当我想从俱乐部中删除竞争对手时,我的问题就开始了。如果我删除整个俱乐部,所有竞争对手和俱乐部行都会从我的数据库中删除。但是当我只想删除一个竞争对手时,框架会抛出 DBUpdateException:
*“Club_Competitors”关联集中的关系处于“已删除”状态。给定多重约束,相应的“Club_Competitors”也必须处于“已删除”状态。*
这是我的模型:
[Table("Competitor")]
public class Competitor
{
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public virtual Club Club { get; set; }
public Competitor()
{
}
}
[Table("Clubs")]
public class Club
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ObservableList<Competitor> Competitors { get; set; }
public Club()
{
Competitors = new ObservableList<Competitor>();
}
}
在覆盖的 OnModelCreating 中,我添加了以下代码行:
modelBuilder.Entity<Club>().HasMany(c => c.Competitors).WithRequired(c => c.Club);
在程序启动时,我将所有实体加载到我的应用程序中
dbsCompetitors.Load();
dbsClubs.Load();
然后将它们绑定到数据网格,因此我创建了一个访问 DbSet 的本地部分的 Getter
public ObservableCollection<Club> Clubs
{
get { return dbsClubs.Local; }
}
我的 xml 代码看起来像这样
<DataGrid Grid.Column="0" Name="dgClubs" ItemsSource="{Binding Clubs}"/>
<DataGrid Grid.Column="1" Name="dgCompetitors" ItemsSource="{Binding ElementName=dgClubs, Path=SelectedItem.Competitors}"/>
当应用程序关闭时,我只是打电话
_context.SaveChanges();
有谁知道我做错了什么?
亲切的问候马努