gpt4 book ai didi

entity-framework-core - Entity Framework 7(测试版7)和实体跟踪

转载 作者:行者123 更新时间:2023-12-04 03:15:52 25 4
gpt4 key购买 nike

我正在尝试将域模型(负责我的业务逻辑)与数据模型分开,这是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中如何工作?我希望能够应用此模式,以便可以将这两个模型分开。

最佳答案

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

关于entity-framework-core - Entity Framework 7(测试版7)和实体跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32991516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com