0

初めての 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();

誰かが私が間違っていることを知っていますか?

敬具マヌ

4

0 に答える 0