Я пытаюсь реализовать шаблон домена "Party", используя сначала EF Code с Fluent Configuration для всех моих бизнес-классов. Конфигурация заставляет меня пить (не обязательно плохо, но следующая остановка - скала)
То, что я хотел бы, - это что-то вроде кода, показанного ниже. Требования к базе данных таковы, что я получаю следующие таблицы:
Отдельная таблица "Стороны"
Отдельная таблица "Люди"
Отдельная таблица "Организации"
Таблица людей имеет обязательные отношения один-к-одному с таблицей сторон, т. Е. Перед тем, как иметь человека, у вас должна быть Сторона.
Организационный стол имеет обязательные отношения «один к одному» со Стороной, то есть вы должны иметь Сторону, прежде чем иметь Организацию.
И все бизнес-объекты наследуются от базового класса BusinessObject, который не должен попадать в базу данных, т. Е. Только для наследования свойств.
Я хочу использовать подход Code First / Fluent API с использованием классов EntityTypeConfiguration, т. Е. У меня есть следующие классы для настройки:
- Контекстный класс для настройки конфигурации.
- Отдельные классы конфигурации для каждого бизнес-объекта, т.е. PersonConfiguration, OrganizationConfiguration и т. Д.
Может кто-нибудь помочь мне с определением Fluent Configuration для этого сценария? Или укажите мне на пример?
Спасибо! (Код ниже)
PSEUDO CODE ............................................. ......................
// Business Obsject Base Class
// Should not be implemented as a database table!!!!
// No Primary Key Needed Here
public abstract class BusinessObject
{
private List<BusinessRule> _businessRules = new List<BusinessRule>();
public List<BusinessRule> BusinessRules
{
get { return _businessRules; }
}
private List<string> _validationErrors = new List<string>();
public List<string> ValidationErrors
{
get { return _validationErrors; }
}
public DateTime CreatedDate { get; set; }
public Person CreatedBy { get; set; }
public ModifiedDate { get; set; }
public Byte[] RowVersion { get; set; }
}
// Party Pattern Base Class inherits BusinessObject base class
// Shared Basis for People and Organizations
public abstract class Party : BusinessObject
{
public virtual int PartyId { get; set; }
public abstract string DisplayName { get; internal set; }
}
// Is a Party, Implements both BusinessObject base and Party base
public class Person : Party
{
// Both a Primary and a Foreign Key
// Should be a one-to-one relationship with Party
//would like this to be "PersonId" not "PartyId" but it's OK if it is not
public int PersonId { get; set; }
pubilc virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public override string DisplayName
{
get { return LastName + ", " + FirstName; }
internal set { }
}
}
// Is a Party, Implements both BusinessObject base and Party base
public class Organization : Party
{
// Both a Primary and a Foreign Key
// Should be a one-to-one relationship with Party
//would like this to be "PersonId" not "PartyId" but it's OK if it is not
public int OrganizationId { get; set; }
pubilc virtual string Name { get; set; }
public override string DisplayName
{
get { return Name; }
internal set { }
}
}