簡體   English   中英

實體框架中的外鍵問題一對多

[英]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; }    
}

問題是StepUpTransformador都與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM