NHibernate: отображение для сложного объекта с интерфейсами для одной таблицы

Я пытаюсь сопоставить составной объект, который имеет свойство с интерфейсом (INameTypeInfo). Этот интерфейс реализован двумя классами (PersonNameInfo и CompanyNameInfo). Информация для всех трех этих структур в одной таблице.

Объект выглядит так:

public class Name : Entity
{
    public virtual string FirstName {get; set;}

    public virtual string LastName {get; set;}

    public virtual INameTypeInfo NameTypeInfo {get; set;}

    etc...
}

Другие объекты выглядят так:

public class PersonNameTypeInfo()
{
    public string SSN {get; set;}
    public string AKAFistName {get; set;}
    public string AKALastName {get; set;}
    etc...
}

public class CompanyNameTypeInfo()
{
    public string FederalIDNumber {get; set;}
    public string AKAName {get; set;}
    etc...
}

Таблица БД выглядит так:

имена

  • Имя
  • Фамилия
  • AKAFistName <------ Если информация относится к компании, это поле используется для AKAName
  • AKALastName
  • ПЛА
  • FID
  • CompanyContact

Также обратите внимание: объект Name также наследуется другими объектами, такими как Party:Name, Provider:Name и т. Д.

База данных - это устаревшая база данных, которая уже используется.

Любой пример того, как я мог бы сопоставить это с беглым, был бы полезным

Благодарю.

1 ответ

public class person
{

// this is the table for person 
   private String name;
   private String lastName;
   private Company company;


}


public class Company
{ 
  private string name;
  private string address;
  // more properties.
}

Когда вы загружаете людей, вы также можете использовать компанию. Поэтому, когда вы говорите Person.company.name, оно получит имя, и если вы что-то измените в человеке, который имеет дело с компанией Hibernate, все изменения будут каскадно перенесены в базу данных.

Может быть, это не ваш вопрос, а просто пища для размышлений.

но если вы хотите сделать их составным ключом, вы можете сделать третий пример объекта

public class  organization
{
  private person person;
  private company company;
}

а не иметь компанию внутри человека. когда вы получаете организацию, вы получаете как человека, так и компанию DAO

Другие вопросы по тегам