1

Я только начал использовать Entity Framework для своего следующего проекта, и я боюсь следующего. У меня есть следующий класс ApplicationUser:Множественные отношения к отдельной таблице Entity Framework asp.net MVC

public class ApplicationUser : IdentityUser 
{ 
    public string Name { get; set; } 
    public int CompanyId { get; set; } 
    public virtual Company Company { get; set; } 
} 

У меня есть два класса, которые присущи от этого класса:

класса
public class TrainerUser : ApplicationUser 
{ 
    public virtual ICollection<ClientUser> Clients { get; set; } 
} 

public class ClientUser : ApplicationUser 
{ 
    public string TrainerId { get; set; } 
    public TrainerUser Trainer { get; set; } 
} 

Компании выглядит следующим образом:

public class Company 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<TrainerUser> Trainers { get; set; } 
    public virtual ICollection<ClientUser> Clients { get; set; } 
} 

То, что я не могу выяснить, как я могу использовать свободный API, чтобы не включать 3 разных столбца companyId в таблицу ApplicationUsers.

В настоящее время у меня есть следующая свободно конфигурация API:

modelBuilder.Entity<TrainerUser>().HasRequired(c => c.Company).WithMany(t => t.Trainers).HasForeignKey(c => c.CompanyId); 
modelBuilder.Entity<ClientUser>().HasRequired(c => c.Company).WithMany(c => c.Clients).HasForeignKey(c => c.CompanyId); 

Может кто-нибудь мне точку в правильном направлении?

+0

Вы пытались переместить навигатор в компанию, в настоящее время в приложении пользователя, на другие классы наследования? –

+0

, если «ApplicationUser» не является сущностью в вашем приложении, тогда вы можете сделать абстрактный класс, и я думаю, что он должен исправить эту проблему, я бы попробовал это в первую очередь. – SOfanatic

ответ

0

Попробуйте добавить их в свой код.

modelBuilder.Entity<TrainerUser>().ToTable("TrainerUser"); 
modelBuilder.Entity<ClientUser>().ToTable("ClientUser"); 

Если я получу вас правильно. вы пытаетесь создать структуру, представляющую Table Per Hierarchy (TPT). Узнайте больше об этом по ссылке.

В основном, что происходит, когда структура сущности встречает наследование в сущности. По умолчанию попытка создания таблиц создается путем создания столбца набора всех свойств всех производных объектов из класса с столбцом дискриминатора.

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

+1

Привет, Парв, это правильно. Я сделал ваше предложение, но также переместил навигатор в наследующие классы, как сказал Пол. Объединив решение, я решил свою проблему. Спасибо! – Robod