我已经花了大约4个小时试图找出我在这个TPT层次结构中做错了什么,这是一个巨大的痛苦。
我有基类:
public partial class Registry
{
public int Id_Audit{get;set;}
public string CUD{get;set;} //Key Value
public bool Canceled{get;set;}
public virtual ICollection<Articles> Articles {get;set;}
public virtual ICollection<Paid> Paids {get;set;}
//Other base properties
}
public partial class Sale : Registry
{
public int idsale{get;set;}
}
public partial class Cuote : Registry
{
public int idCuote{get;set;}
public int Consec{get;set;}
public int Modification{get;set;}
//Other Cuote properties
}
在运行时与Registry
对象进行交互,直到它决定了哪个对象:Sale
或Cuote
,因此我创建了一个扩展类来导出基类到派生类
public partial class Registry
{
public Sales ToSale()
{
Sale r = new Sale
{
Canceled = this.Canceled,
CUD = this.CUD,
Id_Auditoria = this.Id_Auditoria,
//other properties
};
return r;
}
}
同样的功能是为了cuotes。
所以我像这样使用它
Sale s = tempRegistry.ToSale();
dbContext.Registrys.Add(s);
dbContext.SaveChanges();
但每次SaveChanges()
都会抛出异常:
INSERT语句与FOREIGN KEY约束冲突&#34; FK_Registrys_Audits&#34;。冲突发生在数据库&#34; testDB&#34;,table&#34; dbo.Audits&#34;,column&#39; Id&#39;中。 声明已经终止。
但是该属性是在SaveChanges()
执行之前设置的,但在SaveChanges()
之后没有。
这里有一个标题(名称略有不同,Id_Auditoria == Id_Audit
,Registros_Auditoria == Registry
):
On Catch
答案 0 :(得分:2)
大家好,最后一切都有效,我不太确定究竟是什么问题,我被迫重建实体框架模型,重命名类等,其中一个最重要的变化就是
Sale
。Registry
而不是基类。感谢您的帮助。