У меня есть простая структура в базе данных:
CREATE TABLE user_categories (
user_id INT NOT NULL,
category_id INT NOT NULL,
PRIMARY KEY (user_id, category_id)
);
CREATE TABLE user_defaults (
user_id INT NOT NULL,
category_id INT NOT NULL,
PRIMARY KEY (user_id),
FOREIGN KEY (user_id, category_id) REFERENCES user_categories (user_id, category_id)
);
Намерение здесь состоит в том, что пользователю назначен набор категорий, и есть таблица с таблицей по умолчанию (которая потенциально может иметь другие столбцы)
Однако я изо всех сил пытаюсь отобразить это в EF Core, я всегда получаю дополнительные столбцы в таблице user_categories
.
Мой UserCategory
класс:
using System.ComponentModel.DataAnnotations.Schema;
namespace EMMA.Authorization.Domain.Entities
{
public class UserCategory
{
public int UserId { get; set; }
[ForeignKey(nameof(UserId))]
public User User { get; set; }
public int CategoryId { get; set; }
[ForeignKey(nameof(CategoryId))]
public Category Category { get; set; }
public UserDefaults UserDefaults { get; set; }
}
}
UserDefaults
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
namespace EMMA.Authorization.Domain.Entities
{
public class UserDefaults
{
public int UserId { get; set; }
public int CategoryId { get; set; }
public virtual ICollection<UserCategory> UserCategories { get; set; }
}
}
Это OnModelCreating
метод, который должен настраивать отношения:
modelBuilder.Entity<UserCategory>().HasKey(s => new { s.UserId, s.CategoryId });
modelBuilder.Entity<UserDefaults>().HasKey(s => s.UserId);
modelBuilder.Entity<UserDefaults>()
.HasMany(s => s.UserCategories)
.WithOne(s => s.UserDefaults)
.HasForeignKey(s => new { s.UserId, s.CategoryId })
.IsRequired();
Однако я получаю исключение, когда пытаюсь создать миграцию:
Отношение между UserCategory.UserDefaults и UserDefaults.UserCategories со свойствами внешнего ключане совместимоСконфигурируйте основной ключ или набор совместимых свойств внешнего ключа для этой взаимосвязи.
Как настроить такую взаимосвязь в EF Core, как показано в SQL?