Entity Framework 7 (베타 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 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...
}

이러한 변경 사항을 적용하려고하면 InvalidOperationException이라는 메시지가 나타납니다.

"동일한 엔터티 유형 'Tables.PersonTable'의 인스턴스는 동일한 키가있는이 유형의 다른 인스턴스가 이미 추적되기 때문에 추적 할 수 없습니다. 새 엔터티의 경우 IIdentityGenerator를 사용하여 고유 한 키 값을 생성하는 것이 좋습니다.

엔티티 추적과 관련이 있다고 가정하지만 EF 7에서는 어떻게 작동합니까? 나는이 두 모델을 분리 할 수 ​​있도록이 패턴을 적용 할 수 있기를 원합니다.

인기 답변

// 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);

저장시 다음 코드를 사용해야합니다.

// 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);



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.