Запутанная ситуация
У меня есть ситуация, когда у меня есть 2 объекта, один из которых наследуется от другого, которые необходимо сопоставить с двумя отдельными таблицами, но использование кода должно основываться на двух объектах. .
Подробнее
public class Team
{
public virtual int Id { get; set; }
public virtual ICollection<Employee> Members { get; set; }
}
public class Employee
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Team> Teams { get; set; }
}
public class EmployeeInfo : Employee
{
public virtual int Id { get; set; }
public virtual decimal Amount { get; set; }
}
У нас есть существующая схема базы данных, в которой Employee и EmployeeInfo являются отдельными таблицами с FK между EmployeeInfo_Id и Employee_Id.
В нашей системе «менеджеры» будут добавлять сотрудников в систему с набором личной информации (больше свойств, чем указано выше), например, оплату, и добавлять их в команду. Другие области системы будут использовать объекты Team или Employee для различных других целей. Мы хотели бы иметь очень простой код, если можно выполнить сопоставление.
Когда менеджер создает нового сотрудника, код должен выглядеть примерно так:
public void Foo(string name, decimal pay)
{
// create the employee
var employee = new EmployeeInfo();
employee.Name = name;
employee.Pay = pay;
// add him/her to the team
_team.Employees.Add(employee); // the idea being that consumers of the Team entity would not get the separate employee info properties
// save the context
_context.SaveChanges();
}
Конечным результатом будет то, что свойства EmployeeInfo вводятся в таблицу EmployeeInfo, а базовые данные о сотруднике вводятся в таблицу сотрудников и добавляются в группу через таблицу связей TeamEmployees.
Пока я пробую текущие сопоставления и получаю недопустимый столбец с именем «Дискриминатор». При простом добавлении сотрудника в команду.
public class TeamConfiguration : EntityTypeConfiguration<Team>
{
public TeamConfiguration()
{
ToTable("Team");
HasKey(t => t.Id);
HasMany(t => t.Members).WithMany(m => m.Teams)
.Map(m =>
{
m.MapLeftKey("Team_Id");
m.MapRightKey("Employee_Id");
m.ToTable("TeamEmployees");
});
}
}
public class EmployeeConfiguration : EntityTypeConfiguration<Employee>
{
public EmployeeConfiguration()
{
ToTable("Employee");
ToTable("EmployeeInfo");
HasKey(t => t.Id);
Property(p => p.Name);
HasMany(m => m.Teams)
.WithMany(t => t.Members)
.Map(m =>
{
m.MapLeftKey("Employee_Id");
m.MapRightKey("Team_Id");
m.ToTable("TeamEmployees");
});
}
}
Кроме того, если я исключаю связь «многие ко многим» между командой и сотрудником, я получаю исключение FK от Employee_Id до EmployeeInfo_Id.
Спасибо, Дж.Р.