Нельзя использовать таблицу «Счета» для типа объекта «Пользователь», так как она используется для типа объекта «Адрес» - PullRequest
0 голосов
/ 25 апреля 2019

Я схожу с ума прямо сейчас. Я пытаюсь смоделировать свою модель базы данных с помощью свойств навигации, которые существуют как для дочерних, так и для родительских идентификаторов. Это означает, что у родительского элемента есть свойство nav, указывающее на дочернего элемента, а у дочернего элемента есть свойство nav, указывающее на родительского элемента.

Вот моя модель:

public class User : IdentityUser
{
    public Company Company { get; set; }
    public Employee Employee { get; set; }
}

public class Employee
{
    [Key]
    public int ID { get; set; }
    public Address Address { get; set; }
    public User Account { get; set; }
}

public class Company
{
    [Key]
    public int ID { get; set; }
    public List<User> Accounts { get; set; }
}

public class Address
{
    [Key]
    public int ID { get; set; }
    public Employee Employee { get; set; }
}

Затем я создал класс контекста базы данных примерно так:

public class UserManagementDbContext : IdentityDbContext<User>
{
    public DbSet<Company> Companies { get; set; }
    public DbSet<Employee> Employees { get; set; }
    public DbSet<Address> Addresses { get; set; }

    public UserManagementDbContext(DbContextOptions<UserManagementDbContext> options)
           : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<User>()
            .OwnsOne(cu => cu.Employee)
            .HasOne(e => e.Account);
        builder.Entity<User>()
            .HasOne(cu => cu.Company)
            .WithMany(c => c.Accounts);
        builder.Entity<Employee>()
            .OwnsOne(e => e.Address)
            .HasOne(a => a.Employee);

        builder.Entity<User>().ToTable("Accounts");
        builder.Entity<IdentityRole>().ToTable("Roles");
    }
}

Затем я вызываю метод EnsureCreated () базы данных в моем Startup.cs следующим образом:

private async Task InitializeDatabase(IServiceProvider serviceProvider)
{
    using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
    {
        using (var db = serviceProvider.GetService<UserManagementDbContext>())
        {
            db.Database.EnsureCreated();
            //...omitted
        }
    }
}

Это приложение, в котором происходит сбой с вышеуказанной ошибкой, и я не понимаю, почему. Нет связи между таблицами Accounts и Addresses. Либо я слепой как летучая мышь и не заметил опечатки, либо эта ошибка действительно сбивает с толку.

Может кто-нибудь помочь мне здесь?

РЕДАКТИРОВАТЬ: Обратите внимание, что я не хочу использовать внешние ключи, только свойства навигации.

...