如何在DBContext.ChangeTracker中获取具有复杂类型更改的实体?它适用于原语...
...模型
public class SalesPerson
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public virtual SalesPerson SalesPerson { get; set; }
}
存储库方法......
public void SaveChanges()
{
var changedItems = _context.ChangeTracker.Entries()
.Where(e => e.State != EntityState.Unchanged)
.ToList();
foreach (var item in changedItems)
{
if (item.State == EntityState.Modified)
{
//Do something
}
}
}
}
所以...如果我更改了客户的名称,ChangeTracker(changedItems)会显示更改...正如所料。
如果我将SalesPerson分配给客户,则ChangeTracker不会提取它。 (因为EF不跟踪复杂类型的变化)。
非常感谢任何帮助。
答案 0 :(得分:0)
我更改了SalesPerson类以包含List并将SalesPersonId属性添加到Client类(参见下文)。然后我添加了一些DbModelBuilder(EF的流畅API)逻辑来连接所有内容。
<强>模型强>
public class SalesPerson
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual List<Client> Clients { get; set; }
}
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public virtual SalesPerson SalesPerson { get; set; }
public int? SalesPersonId { get; set; }
}
DbContext类
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Client>()
.HasOptional(e => e.SalesPerson)
.WithMany(e => e.Clients)
.HasForeignKey(e => e.SalesPersonId);
}
存储库保持不变。现在它将检测更改,因为SalesPersonId(基元)将更改。
谢谢@Pawel