[英]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.