問題があります。データを更新してデータを挿入できるウィザードがあります。だから、もし私がチームメンバーの既存のリストを持っていれば、彼らの役割を更新することができますが、必要ならばこのチームに人を追加/挿入することもできます。したがって、同じトランザクション中に、ロールを更新して、新しいチームメンバーを同じテーブルに挿入することができます。データを更新してテーブルteamMembersに挿入することができます。エンティティフレームワーク同じトランザクション中に挿入、更新、削除する
私は新しいteamMemberを追加しようとすると、自分の役割を更新したいだけの既存のメンバーも持っています。 どちらの変更も、TeamMemberという同じテーブルに発生します。コンテキストをデバッグすると、すべてがうまく見えます。 TeamMemberテーブルに2つの変更があることが示されています。 1つのトランザクションは更新であり、他のトランザクションは挿入である。
var teamMember = new TeamMember
{
Name = user.FullName,
UserProfileId = user.UserProfileId,
RoleId = user.RoleId
};
TeamMemberList.Add(teamMember);
project.TeamMembers = TeamMemberList;
//And then call
this.Context.Projects.Attach(project);
this.Context.Entry(project).State = System.Data.EntityState.Modified;
更新が実行されますが、挿入する必要があるレコードは失敗します。
同じトランザクション中に同じテーブルに挿入して更新することはできますか?データベースへ
変更が正常にコミットされたが、オブジェクトコンテキストを更新中にエラーが発生しました:
CURRENTエラーです。 ObjectContextが矛盾した状態になっている可能性があります。内部例外メッセージ:参照整合性制約違反が発生しました。参照制約を定義するプロパティ値が、関係のプリンシパルオブジェクトと依存オブジェクトの間で一貫していません。
ありがとうございました。なぜローカルとグローバルコンテキストに移入する必要があるのかを説明する情報はありますか? – Keith
ローカルでは、プロジェクトエンティティのTeamMembersコレクションを意味しますか?そうであれば、これは実際にTeamMemberをプロジェクトエンティティにリンクすることです。これはTeamMemberエンティティに公開されている場合は、「Project」プロパティを使用して行うこともできます。 –