EF 不跟踪继承类型的更改

本文关键字:类型 继承 跟踪 EF | 更新日期: 2023-09-27 18:31:29

>我正在使用实体框架 6 版本。我有这样的关系

public class Maintenance {
  [Key, ForeignKey("Configuration")]
  public int Id {get;set;}
  public string Text {get;set;}
  public Configuration Configuration {get;set;}
}
public abstract class Configuration {
 [Key]
 public int Id{get;set;}
 public Maintenance Maintenance {get;set;}
}
配置类

实际上是许多类型配置的基本类

例如,简单配置:配置{...}ComplexConfiguration : Configurations {...} e.t.c.遗传的 EF 映射如下所示:

Map<SimpleConfiguration>(x => x.Requires("Type").HasValue(0));
Map<ComplexConfiguration>(x => x.Requires("Type").HasValue(1));

因此,当我创建新配置并将其保存_db时。保存更改() - 一切正常。例如。

var maintenance = db.Maintenance.Find(maintenanceId);
maintenance.Configuration = new SimpleConfiguration();
db.SaveChages();

但是当我尝试更新现有配置时

maintenance.Configuration = new ComplexConfiguration();
db.SaveChanges();

根本不起作用。我也试过

maintenance.Configuration = null;
maintenance.Configuration = new ComplexConfiguration();
db.SaveChanges();

无。。。

至少我已经找到了解决方案

var config = db.Configurations.Find(configId);
db.Configurations.Remove(config);
db.SaveChanges();
maintenance.Configuration = new ComplexConfiguration();
db.SaveChanges();

所以我应该两次修复更改。但我想知道 EF 是否不检查配置是否按类型更改。一些想法?

EF 不跟踪继承类型的更改

在 EF 中创建现有实体后,无法更改其类型,如此处所述。因此,如果您需要用另一个配置替换一个配置,则需要删除并创建,就像您所做的那样。