0
我正在使用实体框架6版本。 我有这样的关系EF不跟踪enherited类型的更改
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;}
}
配置类实际上是多种类型的配置
为前基本类。 SimpleConfiguration:配置{...} ComplexConfiguration:配置{...} e.t.c. 为enheritance的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();
不会在所有的工作。此外,我已经tryed
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不检查Type是否改变配置。一些想法?
thnx为答案,创建SP转换这是一个好主意 – Andriy
很高兴它是有用的。其实我不喜欢sp选项,但这取决于你。请不要忘记标记为已解决!有问题 – tede24
有时SP可能真的有助于提高性能。无论如何,thnx的帮助:) – Andriy