繁体   English   中英

EF不会跟踪继承的类型的更改

[英]EF doesn't track changes for enherited types

我正在使用实体框架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:配置{...}等用于继承的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是否不检查配置是否已根据类型更改。 有想法吗

在EF一旦创建它,你不能改变现有实体的类型,如声明在这里 因此,如果您需要将一种配置替换为另一种配置,则需要像执行操作一样删除和创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM