我尝试为我的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; }
它仍然给我带来与上面给出的相同的错误。
答案 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; }
}
它只是有效。