Ошибка: невозможно определить порядок составного первичного ключа для типа
Я пытаюсь создать контроллер для моей 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 ответ
Я исправил эту проблему, сделав несколько простых изменений.
Я снял свою тройку [ForeignKey("//")]
в моей ClientModel. Я добавил Внешние ключи к своим Первичным ключам в моих других 3 моделях со ссылкой на мою ClientModel.
То, что я сделал дальше, было основным исправлением. я добавил [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; }
}
Это просто работает.