Error: Unable to determine composite primary key ordering for type

Error: Unable to determine composite primary key ordering for type

我尝试为我的 ClientModel 搭建一个控制器,它给我一个错误,叫做:

There was an error running the selected code generator: 'Unable to retrieve metadata for '/////.ClientModel'. Unable to determine composite primary key for ordering for type '/////.ClientModel'. Use the ColumnAttribute (link) or the HasKey method (link) to specify an order for composite primary keys.

我有三个 classes,他们都与我的客户 class.

是一对一的关系

这是我的 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; }
}

护照class:

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

帐号class:

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

会员资格class:

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

我不明白如何修复“无法检索 <class> 的元数据”错误。我如何 link classes 使用复合键?


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

DatabaseGenerated.DatabaseOption.Identity

我的主键在其他 classes(护照、会员资格和帐户)中。所以我向我的 ClientModel 添加了一些属性:

        [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("//")]。我将 外键 添加到我的 主键 在我的其他 3 个模型中参考我的 ClientModel.

我接下来做的是主要修复。我在其他三个模型中的 public ClientModel Client { 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; }
}

它很管用。