1

EFを使用して、データベーステーブルのクラスを生成しました。

public partial class Course
{
    public Course()
    {
        this.People = new HashSet<People>();
    }

    public int ID { get; set; }
    public string Name { get; set; }       

    public virtual ICollection<Person> People { get; private set; }     
}

public partial class Person
{
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual Course Course { get; set; }
}

ご覧のとおり、各コースには人々の集まりがあります。EFダイアグラムを更新したときにコードがクリアされないように、2番目の部分クラスを作成しました。私の質問は、コースオブジェクト内から人々のリストをクリアするにはどうすればよいですか?

私は試した:

public partial class Course
{    
      public void ResetCourse()
      {
          this.People.Clear();
      }
}

しかし、私はこのエラーを受け取ります:

操作が失敗しました:1つ以上の外部キープロパティがnull許容でないため、関係を変更できませんでした。リレーションシップに変更が加えられると、関連する外部キープロパティがnull値に設定されます。外部キーがnull値をサポートしていない場合は、新しい関係を定義するか、外部キープロパティに別の非null値を割り当てるか、無関係のオブジェクトを削除する必要があります。

これは明らかに、EFが実際にpersonオブジェクトを削除しているのではなく、SQLがnullキーを持つことができないためにSQLがスローする2つの間の関係を削除しているためです。

どうやら私はcontext.DeleteObject(person)のようなものを使うべきです

ただし、コースオブジェクト内にはコンテキストへの参照がないため、UIコードを単純にするために、オブジェクト内にコードを保持したいと思いました。

4

1 に答える 1

1

コースクラスを使用してデータベース操作を管理する代わりに、エンティティフレームワークを操作するときは、リポジトリとユニットオブワークのパターンを使用することをお勧めします。それ以外の場合、エンティティは常にコンテキストを保持します。これはいくつかの問題につながります。

パラメータとしてコンテキストを使用してCourseリポジトリを作成し、エンティティ自体ではなくリポジトリでデータベース操作を使用するだけです。参照: 作業単位とリポジトリパターン

于 2012-05-22T13:45:06.390 に答える