[英]Problem with foreign key in Entity Framework one to many
我遇到了一些外鍵問題,事實證明我正在對添加新表的舊系統進行修訂,這樣做時會出現以下情況。
簡而言之,我有以下 3 個課程。
public class StepUp
{
[Key]
[Column(Order = 0)]
public string CodigoDelfos { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Revision { get; set; }
public virtual ICollection<Accesorio_x_Trafos> Accesorios { get; set; }
//More irrelevant properties..
}
public class Transformador
{
[Key]
[Column(Order = 0)]
public string Codigo_delfos { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Revision { get; set; }
public virtual ICollection<Accesorio_x_Trafos> Accesorio_x_Trafos { get; set; }
//More irrelevant properties..
}
public class Accesorio_x_Trafos
{
[Key]
[Column(Order = 0)]
public string CodigoAccesorio { get; set; }
[Key]
[Column(Order = 1)]
public string CodigoDelfos { get; set; }
[Key]
[Column(Order = 2)]
public int Revision { get; set; }
public int? Cantidad { get; set; }
}
問題是StepUp
和Transformador
都與Accessorio_x_Trafos
有 1- * 關系。
遷移時,正確創建數據庫(添加FK)
(忽略 FK Accesorios
這是我刪除的屬性之一,以免有太多代碼)
問題是,當我嘗試時,兩者都修改了 Transformer 類型的對象(我按如下方式進行)
//Get any object..
var transformador = mContext.Transformador.First();
//Add random data..
transformador.Accesorio_x_Trafos = new List<Accesorio_x_Trafos>
{
new Accesorio_x_Trafos
{ CodigoDelfos = transformador.Codigo_delfos, Revision = transformador.Revision, Cantidad = 1, CodigoAccesorio = "05-CBPA0150000802000P0800"},
new Accesorio_x_Trafos
{ CodigoDelfos = transformador.Codigo_delfos, Revision = transformador.Revision, Cantidad = 2, CodigoAccesorio = "05-CBPA0150000803150P0700"},
new Accesorio_x_Trafos
{ CodigoDelfos = transformador.Codigo_delfos, Revision = transformador.Revision, Cantidad = 3, CodigoAccesorio = "05-CBPA0150000803150P0700"}
};
//Save it
mContext.SaveChanges();
但這會引發以下異常
保存未公開其關系的外鍵屬性的實體時發生錯誤。 EntityEntries 屬性將返回 null,因為無法將單個實體標識為異常源。 處理異常時...
而在 InnerException 中
Instrucción INSERT en conflicto con la restrictción FOREIGN KEY \\"FK_dbo.Accesorio_x_Trafos_dbo.StepUps_CodigoDelfos_Revision\\"。 El conflicto ha aparecido en la base de datos \\"DBTrafos\\", tabla \\"dbo.StepUps\\"。\\r\\nSe terminó la instrucción。
我該如何處理?
我通過創建一個抽象類來解決我的問題,該類以這種方式替換了Accessory_x_Trafos
,然后您可以使用其外鍵和相應的導航屬性指定每個繼承的類。
public abstract class AccesorioTransformador
{
public Guid Id { get; set; }
public string CodigoAccesorio { get; set; }
public int Cantidad { get; set; }
}
public class AccesorioStepUp : AccesorioTransformador
{
public string CodigoDelfos { get; set; }
public int Revision { get; set; }
[ForeignKey(nameof(CodigoDelfos)+","+nameof(Revision))]
public StepUp.StepUp Transformador { get; set; }
}
public class AccesorioDistribucion : AccesorioTransformador
{
public string CodigoDelfos { get; set; }
public int Revision { get; set; }
[ForeignKey(nameof(CodigoDelfos) + "," + nameof(Revision))]
public Transformador Transformador { get; set; }
}
這樣,在每個相應的類中,我使用了屬性,類型為ICollection<AccesorioStepUp>
或類型為ICollection<AccesorioDistribucion>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.