C# 实体框架一对多中的外键问题

C# 实体框架一对多中的外键问题,c#,sql,database,entity-framework,entity-framework-6,C#,Sql,Database,Entity Framework,Entity Framework 6,我遇到了一些外键问题,原来我正在对一个旧系统进行修改,在这个系统中添加了一个新表,在这样做的过程中,出现了以下问题 简而言之,我有以下三门课 public class StepUp { [Key] [Column(Order = 0)] public string CodigoDelfos { get; set; } [Key] [Column(Order = 1)] [DatabaseGenerated(DatabaseGener

我遇到了一些外键问题,原来我正在对一个旧系统进行修改,在这个系统中添加了一个新表,在这样做的过程中,出现了以下问题

简而言之,我有以下三门课

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; }    
}
但这引发了以下异常

保存不公开外键的实体时出错 属性的关系。EntityEntries属性将 返回null,因为无法将单个实体标识为源 这是个例外。处理异常时

在内部异常中

插入与限制外键冲突的指令 \“FK_dbo.Accesorio_x_Trafos_dbo.Steups_CodigoDelfos_Revision\”。埃尔 冲突发生在datos“DBTrafos”基地,表A \“dbo.steppups\”\r\n术语说明


如何处理这个问题?

我通过创建一个抽象类来解决我的问题,这个抽象类替换了
附件
,然后用它的外键和相应的导航属性指定每个继承的类

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; }
}

这样,在每个对应的类中,我都使用了属性,type
ICollection
或type
ICollection

您应该在Accesorio_x_Trafos中有一个Steppup和Transformador对象,然后设置到每个类的FK映射(或使用fluent代码)。我不知道如何使用复合键结构来实现这一点。@SteveGreene Ty作为答案,那么,我是否应该拥有使用Accesorio_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; }
}