我使用的是实体框架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没有检查配置是否按类型更改。有些想法?