Проблема
Я хочу реализовать внешний ключ таблиц IdentityDb
для других таблиц, которые используются другим contextdb.
У меня есть 2 контекста БД, один из них по умолчанию(Я создал MVC 5
проект с индивидуальным шаблоном проекта учетной записи пользователя), а другой - это созданный мной контекст, в котором используются таблицы, отличные от контекста по умолчанию.
В ApplicationDbContext
у нас есть AspNetUsers
таблица, в которой есть несколько столбцов, но меня интересует Id
.В другом ContextDB
у меня есть таблица с именем Checkout
, в которой также есть несколько столбцов, и один из них меня интересует - Id
.Теперь я хочу реализовать отношение many to many
.Итак, я создал еще одну таблицу, позволяющую вызывать таблицу CheckoutProducts
, в которой есть столбец UserId
, который будет внешним ключом, ссылающимся на первичный ключ в AspNetUsers
, и у меня будет CheckoutId
, который также будет внешним ключом, которыйссылается на первичный ключ в таблице Checkout
.
Как я могу сделать выше в коде?
Сценарий
public class CheckoutUsers
{
[Key, Column(Order = 0)]
[ForeignKey("User")]
[MaxLength(128)]
public string UserId { get; set; }
[Key, Column(Order = 1)]
[ForeignKey("Checkout")]
public int CheckoutId { get; set; }
public virtual ApplicationUser User { get; set; }
public virtual Checkout Checkout { get; set; }
}
Когда я запускаю приложение, оно возвращает:
System.Data.Entity.ModelConfiguration.ModelValidationException: 'Одна или несколько ошибок проверки былиобнаружен во время генерации модели: ShopOnline.App_Start.IdentityUserLogin :: EntityType «IdentityUserLogin» ключ не определен.Определите ключ для этого EntityType.ShopOnline.App_Start.IdentityUserRole :: EntityType «IdentityUserRole» не имеет определенного ключа.Определите ключ для этого EntityType.CheckoutUsers_User_Source:: кратность недопустима в роли «CheckoutUsers_User_Source» в отношении «CheckoutUsers_User».Поскольку свойства зависимой роли не являются ключевыми свойствами, верхняя граница кратности зависимой роли должна быть «*».IdentityUserLogins: EntityType: EntitySet «IdentityUserLogins» основан на типе «IdentityUserLogin», для которого не определены ключи.IdentityUserRoles: EntityType: EntitySet «IdentityUserRoles» основан на типе «IdentityUserRole», для которого не определены ключи.'
Стоит отметить, что если я удаляю эту таблицу или просто удаляю поле ApplicationUser User
, то все работает нормально с точки зрения того, что у меня нет ошибки, а мой UserId не имеетвнешний ключ в другом планшете