EF不会跟踪有关类型的更改

时间:2016-01-22 10:47:15

标签: c# entity-framework

我使用的是实体框架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;}
}

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

代表。 SimpleConfiguration:配置{...} ComplexConfiguration:配置{...} e.t.c. 用于继承的EF映射如下:

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

所以当我创建一个新的配置并保存它_db.SaveChanges() - 一切正常。 对于前。

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没有检查配置是否按类型更改。有些想法?

1 个答案:

答案 0 :(得分:0)

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