错误:无法确定类型的复合主键排序

时间:2015-09-20 21:31:43

标签: c# asp.net entity-framework data-annotations

我尝试为我的ClientModel搭建一个控制器,它给我一个名为:

的错误
  

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

我有三个课程,所有课程与我的客户课程都是一对一的关系。

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

护照类:

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

我不明白如何修复'无法检索<class>错误的元数据。如何使用复合键链接类?

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

DatabaseGenerated.DatabaseOption.Identity

在我的主键中的其他课程(护照,会员和帐户)。所以我在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; }

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

1 个答案:

答案 0 :(得分:2)

我通过做一些简单的修改来解决这个问题。

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

接下来我做的是主要修复。我在其他三个模型中将[Required]添加到public ClientModel Client { get; set; }之上。

现在它的工作原理和脚手架我的 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; }
}

它只是有效。