Entity Framework 7(Beta 7)およびエンティティトラッキング

entity-framework-core

質問

私は自分のビジネスロジックを担当するドメインモデルと、自分のスキーマを構築するためにEF 7が使用するデータモデルとを分離しようとしています。

私は自分のドメインモデルに加えられた変更を自分のデータベースに永続させるという点で問題に遭遇しています

たとえば、データモデルPersonTableとドメインモデルPersonがあるとします。

public class PersonTable
{
    public virtual Guid Id { get; set; }
    public virtual String Name { get; set; }
    public virtual String Surname { get; set; }
}

public class Person
{
    public virtual Guid Id { get; set; }
    public virtual String Name { get; set; }
    public virtual String Surname { get; set; }
    //Other Domain Methods and Constructors...
}

そして、私はこれを行うことで私のデータベースに私のドメインの変更を永続させたい:

public void Update(Person p)
{
    var person = new PersonTable
    {
        Id = p.Id,
        Name = p.Name,
        Surname = p.Surname
    }
    PersonDbContext.Update(person);
    PersonDbContext.SaveChanges();
}

これらの変更を適用しようとすると、InvalidOperationExceptionというメッセージが表示されます

"エンティティタイプ 'Tables.PersonTable'のインスタンスは、同じキーを持つこのタイプの別のインスタンスが既にトラッキングされているため追跡できません。新しいエンティティの場合、IIdentityGeneratorを使用して一意のキー値を生成することを検討してください。

これはエンティティトラッキングと関係がありますが、EF 7ではどのように機能していますか?私はこのパターンを適用して、これら2つのモデルを分離できるようにしたいと考えています。

人気のある回答

// Before updating we have fetch original data row from database.
// So we need to use AsNoTracking().

var originalPerson = PersonDbContext.Person.AsNoTracking().FirstOrDefault(p => p.Id == id);

保存時に次のコードを使用する必要があります。

PersonDbContext.Entry(originalPerson).Context.Update(newPersonDetail);


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ