【发布时间】:2015-12-17 12:31:10
【问题描述】:
我尝试为我的 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 在阅读了一些 cmets 后,我删除了
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; }
它仍然给我与上面给我相同的错误。
【问题讨论】:
-
请不要在您的问题中加入“卡住”或“帮助”;我们知道您需要帮助并且您遇到了困难,否则您不会问这个问题。
-
@GeorgeStocker 感谢您的宝贵建议。我会记住这一点。
-
您的客户定义和表中是否有 MembershipClientValidationId、AccountId 和 PassportDetailsId 字段?关系定义将使用它们将表链接在一起。
-
你也能展示一个 PersonModel 类吗?
-
您有三个 1:1 关联,其中
ClientModel似乎是原则,因此其他类应该具有作为ClientModel的外键的主键。没有DatabaseGeneratedOption.Identity。
标签: c# asp.net entity-framework data-annotations