У меня довольно сложная база данных, которую я хочу сначала сопоставить с кодом, но у меня проблема с таблицей, которую нужно разделить на два отдельных класса.
Базовый пример структуры таблиц:
Site
----
Id
Name
Person
------
Id
Name
Dob
Address
Rank
Age
SiteId
PersonRoleLink
--------------
PersonId
RoleId
Role
----
Id
Name
В основном на сайте много людей, и у каждого человека может быть много ролей.
В зависимости от роли человека зависит, какие свойства будут заселены.
В идеале я хотел бы, чтобы структура класса была следующей:
public class Site {
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Customer> Customers { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
public virtual ICollection<Manager> Managers { get; set; }
}
public class PersonBase {
public int Id { get; set; }
public string Name { get; set; }
public virtual Site Site { get; set; }
}
public class Customer : PersonBase {
public string Name { get; set; }
public DateTime Dob { get; set; }
}
public class Employee: PersonBase {
public int Age { get; set; }
}
public class Manager: PersonBase {
public int Rank { get; set; }
}
Где Customer
, Employee
и Manager
все взяты из таблицы Person
и зависят от соответствующей ссылки в таблице PersonRoleLink
.
Поэтому, когда я вызываю что-то вроде Site.Managers
, возвращаются строки в таблице Person
с правильной версией SiteId и ссылкой на Role
с именем 'Manager'
Возможна ли эта структура сначала в коде? Если да, то как достигается сопоставление для этого и, если нет, есть ли жизнеспособные альтернативы этой структуре?
Спасибо