0

以前より詳細な質問がありましたが、回答がありませんでした。同じ質問をより簡単な方法で行います。

別のテーブルへの外部キーを持つ EF データベースがあります。 ここに画像の説明を入力

ENTITYを更新したいと思います。しかし、私はこのようにする必要があり、以下のコードを書きます:

  1. データベースに移動し、ID でメンバーを取得し、EF メンバー オブジェクトを返します。
  2. EFコンテキストの外側のオブジェクトにいくつかの変更を加えます
  3. MODIFED EF メンバーを Save メソッドに送信する
  4. BL レイヤーでは、保存方法はコンテキストを使用して変更を保存します。

1)

MemberManager currentMemberManager = new MemberManager();
Member NewMember = currentMemberManager.GetById(2);

2)

NewMember.FirstName = "NewFirstName";
NewMember.LanguageId = 1;

3)

currentMemberManager.Save(NewMember);

4)

public void Save2(Member newMember)
{
    using (var Context = new NoxonEntities())
    {
        Member existingMember = Context.Member.First(c => c.Id == newMember.Id);
        existingMember.FirstName = newMember.FirstName;
        existingMember.Language = Context.Language.First(c => c.Id == newMember.LanguageId);
        Context.SaveChanges();//In here I get the error below
    }
}

データベースへの変更は正常にコミットされましたが、オブジェクト コンテキストの更新中にエラーが発生しました。ObjectContext が矛盾した状態にある可能性があります。内部例外メッセージ: 参照整合性制約違反が発生しました: 参照制約を定義するプロパティ値が、リレーションシップ内のプリンシパル オブジェクトと依存オブジェクトの間で一貫していません。

: 必要なすべてのプロパティを持ち、EF から完全に分離された別のクラス (例: パブリック クラス MyMember) を送信することをお勧めします。しかし、これには、すべての EF オブジェクトを個別のクラスに変換するための多くの作業が必要です。私は正しいですか?

エンティティを変更して値をデータベースに保存するのに十分な時間、エンティティをデタッチする方法があることを願っています。(また、行をまったく更新しない Detach メソッドを試しました)

私はこれを何時間も解決しようとしています。

それをよりよく理解するのを手伝ってください、私は本当に解決策が必要です. どのようにいくつかのアイデアを持っている人に感謝します。

4

1 に答える 1

2

保存する準備ができたら、エンティティをデタッチし、コンテキストにアタッチするなどの簡単なことをしていただけますか?

MemberManager currentMemberManager = new MemberManager();
Member NewMember = currentMemberManager.GetById(2);

得る:

public Member GetById(int id)
{ 
  var member = YourContext.Members.FirstOrDefault(m => m.id == id);
  YourContext.Detach(member);
  return member;
}

セーブ:

public void Save2(Member newMember)
        {
            using (var Context = new NoxonEntities())
            {
                Context.Attach(newMember);
                Context.ObjectStateManager.ChangeObjectState(newMember, EntityState.Modified);
                Context.SaveChanges();
            }
        }
于 2012-09-12T13:56:03.993 に答える