實體框架7(Beta 7)和實體跟踪


我試圖將我的域模型(負責我的業務邏輯)與我的數據模型分開,這是EF 7用來構建我的模式的。

關於將我的域模型的更改持久保存到我的數據庫,我遇到了一個問題

所以例如,假設我有數據模型PersonTable和Domain模型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
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因