ASP.NET Core 2.1 EF - отношение «один к одному» создает ограничение внешнего ключа только на одной стороне отношения - PullRequest
0 голосов
/ 24 января 2019

У меня есть две следующие модели:

public class ApplicationUser : IdentityUser
{
    public int? ShoppingCartId { get; set; }
    public ShoppingCart ShoppingCart { get; set; }
}
public class ShoppingCart
{
    public int Id { get; set; }

    public string UserId { get; set; }
    public ApplicationUser ApplicationUser { get; set; }
}

После запуска Add-Migration <some-name> я заметил, что сгенерированная миграция создала FK для столбца ShoppingCartId в таблице AspNetUsers (представленной классом ApplicationUser), но наоборот на стороне в таблице ShoppingCart для столбца UserId не было создано FK.

Есть предложения как это исправить?

Ответы [ 2 ]

0 голосов
/ 24 января 2019

У вас неправильные отношения.

Пользователь не «имеет» корзину покупок (или, по крайней мере, не обязан, например, при новой регистрации), корзина «принадлежит» пользователю.Вы также можете смоделировать это таким образом, чтобы пользователь (возможно, не сейчас, но позже) был владельцем нескольких корзин для покупок.

Итак:

public class ApplicationUser : IdentityUser
{
    // Later: public List<ShoppingCart> ShoppingCarts { get; set; }
    public ShoppingCart ShoppingCart { get; set; }
}
public class ShoppingCart
{
    public int Id { get; set; }

    public string UserId { get; set; }
    public ApplicationUser User { get; set; }
}
0 голосов
/ 24 января 2019

Если вы поместите public ApplicationUser ApplicationUser { get; set; } ApplicationUser в качестве свойства вашей Entity Model, это создаст для вас отношения.

Но я не советую вам делать это, не связывайте все свои таблицы приложений с идентификатором приложения. Также рекомендуется поместить свой контекст аутентификации в отдельную схему контекста базы данных

...