初めての EntityFramework Code First Application を構築しようとしています。そのWPFアプリケーション。したがって、小さなテストモデルを実装しました。クラブは多くの競技者を持つことができ、競技者はクラブを持つ必要があるため、私の観点からは、これは標準的な 1:n の関係のように見えます。私の問題は、クラブから競合他社を削除したいときに始まります。クラブ全体を削除すると、すべての競技者とクラブの行がデータベースから削除されます。しかし、競合他社を 1 つだけ削除したい場合、フレームワークは DBUpdateException をスローします。
*「Club_Competitors」AssociationSet からの関係は「削除済み」状態です。多重度の制約がある場合、対応する「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);
programstart で、すべてのエンティティをアプリケーションにロードします
dbsCompetitors.Load();
dbsClubs.Load();
それらをデータグリッドにバインドするため、DbSet のローカル部分にアクセスするゲッターを作成しました
public ObservableCollection<Club> Clubs
{
get { return dbsClubs.Local; }
}
私のxamlコードは次のようになります
<DataGrid Grid.Column="0" Name="dgClubs" ItemsSource="{Binding Clubs}"/>
<DataGrid Grid.Column="1" Name="dgCompetitors" ItemsSource="{Binding ElementName=dgClubs, Path=SelectedItem.Competitors}"/>
アプリケーションが閉じたら、電話するだけです
_context.SaveChanges();
誰かが私が間違っていることを知っていますか?
敬具マヌ