C# 关系约束中从属角色和主要角色中的属性数必须相同

C# 关系约束中从属角色和主要角色中的属性数必须相同,c#,entity-framework,C#,Entity Framework,尝试在EF中添加迁移时出现问题。错误是 RegisterCountLog\u Register\u Target\u RegisterCountLog\u Register\u Source::关系约束中从属角色和主体角色中的属性数必须相同 课程如下: public class RegisterCountLog { [ForeignKey("CountLog")] public long DeviceSerial { get; set; } [Key, Column(O

尝试在EF中添加迁移时出现问题。错误是

RegisterCountLog\u Register\u Target\u RegisterCountLog\u Register\u Source::关系约束中从属角色和主体角色中的属性数必须相同

课程如下:

public class RegisterCountLog
{
    [ForeignKey("CountLog")]
    public long DeviceSerial { get; set; }

    [Key, Column(Order = 2)]
    [ForeignKey("CountLog")]
    public long LogEntryID { get; set; }

    [Key, Column(Order = 3)]
    [ForeignKey("Register")]
    public long RegisterId { get; set; }

    public long Value { get; set; }

    public virtual CountLog CountLog { get; set; }

    public virtual Register Register { get; set; }
}

public class Register
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Key, Column(Order = 1)]
    public long RegisterId { get; set; }

    [Key, ForeignKey("Device"), Column(Order = 2)]
    public long DeviceSerial { get; set; }

    [StringLength(50)]
    public string RegisterName { get; set; }

    public ContributionType Contribution { get; set; }    

    public virtual Device Device { get; set; }

    public virtual ICollection<RegisterCountLog> CountLogs { get; set; }
}
公共类注册表计数器日志
{
[外键(“CountLog”)]
公共长设备序列{get;set;}
[键,列(顺序=2)]
[外键(“CountLog”)]
公共长日志ID{get;set;}
[键,列(顺序=3)]
[外键(“寄存器”)]
公共长注册表ID{get;set;}
公共长值{get;set;}
公共虚拟CountLog CountLog{get;set;}
公共虚拟寄存器{get;set;}
}
公共班级登记册
{
[数据库生成(DatabaseGeneratedOption.None)]
[键,列(顺序=1)]
公共长注册表ID{get;set;}
[键,外键(“设备”),列(顺序=2)]
公共长设备序列{get;set;}
[长度(50)]
公共字符串注册表名{get;set;}
公共贡献类型贡献{get;set;}
公共虚拟设备{get;set;}
公共虚拟ICollection CountLogs{get;set;}
}

有人能帮忙吗?

因此注册模型有一个复合键
RegisterId
DeviceSerial
,您必须在
RegisterCountLog
模型中指定这两个键

[ForeignKey("RegisterId,DeviceSerial")]
public virtual Register Register { get; set; }

因此,寄存器模型有一个复合键
RegisterId
DeviceSerial
,您必须在
RegisterCountLog
模型中指定这两个键

[ForeignKey("RegisterId,DeviceSerial")]
public virtual Register Register { get; set; }

这有什么区别?定义FK时,必须有一种方法来检索所引用的外部表。您不能仅用一个键检索注册表表,因为它有2个主键(1个主键不能唯一定义注册表类)。因此,您必须清楚地说明外部表的所有PK。这有什么区别?定义FK时,您必须有一种方法来检索所引用的外部表。您不能仅用一个键检索注册表表,因为它有2个主键(1个主键不能唯一定义注册表类)。因此,您必须清楚地说明外部表的所有PK。