C# 错误:无法确定类型的复合主键顺序

C# 错误:无法确定类型的复合主键顺序,c#,asp.net,entity-framework,data-annotations,C#,Asp.net,Entity Framework,Data Annotations,我尝试为我的ClientModel构建一个控制器,它给了我一个错误,名为: 运行所选代码生成器时出错:“无法检索“//.ClientModel”的元数据。”。无法为类型“//.ClientModel”确定排序的复合主键。使用ColumnAttribute(链接)或HasKey方法(链接)指定复合主键的顺序 我有三个类,它们都与我的客户机类有一对一的关系 这是我的客户模型: [Table("Client")] public class ClientModel : PersonModel {

我尝试为我的ClientModel构建一个控制器,它给了我一个错误,名为:

运行所选代码生成器时出错:“无法检索“//.ClientModel”的元数据。”。无法为类型“//.ClientModel”确定排序的复合主键。使用ColumnAttribute(链接)或HasKey方法(链接)指定复合主键的顺序

我有三个类,它们都与我的客户机类有一对一的关系

这是我的客户模型:

[Table("Client")]
public class ClientModel : PersonModel
{
    [Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ClientId { get; set; }
    [Required]
    public string FirstName { get; set; }
    public string Initials { get; set; }
    [Required]
    public string LastName { get; set; }
    //... snip ...
    [Required]
    public long ClientIdentificationNumber { get; set; }
    public virtual PassportDetailsModel Passport { get; set; }
    public virtual MembershipClientValidationModel Membership { get; set; }
    public virtual AccountClientModel Account { get; set; }
}
        [ForeignKey("Passport")]
    public Guid PassportDetailsId { get; set; }
    public virtual PassportDetailsModel Passport { get; set; }

    [ForeignKey("Membership")]
    public Guid MembershipClientValidationId { get; set; }
    public virtual MembershipClientValidationModel Membership { get; set; }

    [ForeignKey("Account")]
    public Guid AccountClientId { get; set; }
    public virtual AccountClientModel Account { get; set; }
护照类别:

[Table("Passport")]
public class PassportDetailsModel
{
    [Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid PassportDetailsId { get; set; }
    [Required]
    public string IssuingCountry { get; set; }
    [Required]
    public DateTime Issued { get; set; }
    [Required]
    public DateTime ExpirationDate { get; set; }
    public virtual ClientModel Client { get; set; }
}
帐户类别:

  [Table("AccountClient")]
public class AccountClientModel
{
    [Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid AccountId { get; set; }
    [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }
    public virtual ClientModel Client { get; set; }
}
会员类别:

[Table("MembershipClientValidation")]
public class MembershipClientValidationModel
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid MembershipClientValidationId { get; set; }
    public DateTime MembershipStartDate { get; set; }
    public DateTime MembershipExpiryDate { get; set; }
    public bool IsMembershipValid { get; set; }
    [Required]
    public virtual ClientModel Client { get; set; }
}
我不明白如何修复“无法检索
的元数据”错误。如何使用复合键链接类


21-09-2015 在读了一些评论后,我删除了

DatabaseGenerated.DatabaseOption.Identity
在我的主键的其他类(护照,会员和帐户)。因此,我在ClientModel中添加了一些属性:

[Table("Client")]
public class ClientModel : PersonModel
{
    [Key(), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid ClientId { get; set; }
    [Required]
    public string FirstName { get; set; }
    public string Initials { get; set; }
    [Required]
    public string LastName { get; set; }
    //... snip ...
    [Required]
    public long ClientIdentificationNumber { get; set; }
    public virtual PassportDetailsModel Passport { get; set; }
    public virtual MembershipClientValidationModel Membership { get; set; }
    public virtual AccountClientModel Account { get; set; }
}
        [ForeignKey("Passport")]
    public Guid PassportDetailsId { get; set; }
    public virtual PassportDetailsModel Passport { get; set; }

    [ForeignKey("Membership")]
    public Guid MembershipClientValidationId { get; set; }
    public virtual MembershipClientValidationModel Membership { get; set; }

    [ForeignKey("Account")]
    public Guid AccountClientId { get; set; }
    public virtual AccountClientModel Account { get; set; }

它给我的错误仍然与上面给我的错误相同。

我通过做一些简单的更改解决了这个问题

我在ClientModel中删除了三个
[ForeignKey(“/”)
。我参考我的ClientModel将外键添加到其他3个型号的主键中

我接下来做的是主要修复。我在我的其他三个模型中的
publicclientmodel客户机{get;set;}
上方添加了
[Required]

现在它可以正常工作了,并且构建了我的ClientController,没有错误。 因此,要显示其他三种模型之一的示例:

public class MembershipClientValidationModel
{
    [Key]
    [ForeignKey("Client")]
    public Guid ClientId { get; set; }
    public DateTime MembershipStartDate { get; set; }
    public DateTime MembershipExpiryDate { get; set; }
    public bool IsMembershipValid { get; set; }
    [Required]
    public virtual ClientModel Client { get; set; }
}

它只是起作用。

请不要在问题中添加“卡住”或“帮助”;“我们知道你需要帮助,而且你被困住了,否则你就不会问这个问题了。”乔治斯托克感谢你的建议。我会记住这一点。在客户端定义和表中是否有MembershipClientValidationId、AccountId和PassportDetailsId字段?关系定义将使用这些定义将表链接在一起。您也可以显示PersonModel类吗?您有三个1:1的关联,其中
ClientModel
似乎是原则,因此其他类应该有主键,它们是
ClientModel
的外键。无
DatabaseGeneratedOption.Identity