1

MVC プロジェクトで最初に Entity Framework コード (バージョン 6) と GraphDiff を使用しています。

データベース内のいくつかのテーブルをマップするエンティティがいくつかあります。

public class CommunicationPlan 
{
    public int CommunicationPlanID { get; private set; }

    [Owned]
    public List<CommunicationTopic> Topics { get; private set; }
}

public class CommunicationTopic 
{
    public int CommunicationTopicID { get; private set; }

    [Owned]
    public List<ContributingMember> Members { get; private set; }
}

public class ContributingMember
{
    public int ContributingMemberID { get; private set; }

    // other simple properties
}

CommunicationPlansを持つ多くCommunicationTopicの sを作成してContributingMember集約 root を保存するとCommunicationPlan、GraphDiff はすべてのレコードを作成し、それらをデータベースに関連付けます。(私が正確に望むように)

問題 既存
の の 1 つを削除しようとすると、このトピックはデータベースから削除されます (必要に応じて) 。であり、データベースに存在します。CommunicationTopicCommunicationPlanContributingMemberCommunicationTopic

ContributingMemberNull 値を受け入れないように外部キーを構成すると、次の例外が発生します。

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

質問ContributingMember親が削除されたときに GraphDiff が s レコードを削除するようにエンティティを構成するにはどうすればよいCommunicationTopicですか?

4

1 に答える 1

1

この問題を解決するには2つの方法があると思います

  1. CommunicationTopic と ContributingMember の間で CASCADE DELETE になるように、データベース内のリレーションシップのカスケード プロパティを構成してみてください。
  2. AggregateRoot を削除しようとするときは、AggregateRoot のグラフ全体がロードされていることを確認してください。
于 2016-08-27T08:56:02.403 に答える