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