简体   繁体   English

错误:无法确定类型的组合主键顺序

[英]Error: Unable to determine composite primary key ordering for type

I try to scaffold a controller for my ClientModel and it gives me an error called: 我尝试为ClientModel搭建一个控制器,它给了我一个错误:

There was an error running the selected code generator: 'Unable to retrieve metadata for '/////.ClientModel'. 运行所选代码生成器时发生错误:“无法检索'/////.ClientModel的元数据”。 Unable to determine composite primary key for ordering for type '/////.ClientModel'. 无法确定用于订购类型'/////.ClientModel'的组合主键。 Use the ColumnAttribute (link) or the HasKey method (link) to specify an order for composite primary keys. 使用ColumnAttribute(链接)或HasKey方法(链接)来指定复合主键的顺序。

I have three classes with all of them an One-To-One relationship with my Client class. 我有三个班级,他们与我的客户班级都是一对一的关系。

This is my ClientModel: 这是我的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; }
}

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

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

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

I don't understand how to fix the 'unable to retrieve metadata for <class> error. 我不明白如何解决“无法检索<class>错误的元数据”的问题。 How do I link classes with composite keys? 如何用复合键链接类?


21-09-2015 After reading some comments I deleted the 2015-09-21阅读了一些评论后,我删除了

DatabaseGenerated.DatabaseOption.Identity

In my primary key's in the other classes (Passport, Membership and Account). 在我的主键中的其他类别(护照,会员资格和帐户)中。 So I added some properties to my ClientModel: 因此,我在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; }

It still gives me the same error as it gave me above. 它仍然给我和上面给我的错误相同的错误。

I fixed this problem by doing some simple changes. 我通过做一些简单的更改解决了这个问题。

I removed my three [ForeignKey("//")] in my ClientModel. 我在ClientModel中删除了三个[ForeignKey("//")] I added the Foreign keys to my Primary keys in my other 3 models with reference to my ClientModel. 我参考ClientModel在其他3个模型的主键中添加了外键

What I did next was the major fix. 接下来我要做的是主要修复。 I added [Required] above the public ClientModel Client { get; set; } 我在public ClientModel Client { get; set; }之上添加了[Required] public ClientModel Client { get; set; } public ClientModel Client { get; set; } public ClientModel Client { get; set; } in my other three models. public ClientModel Client { get; set; }在我的其他三款车型。

Now it works and scaffolds my ClientController without error(s). 现在,它可以正常工作并支撑我的ClientController,而不会出现错误。 So to show an example of one of the other three models: 因此,以显示其他三个模型之一的示例为例:

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

It just works. 它只是工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM