У меня есть следующая объектная модель:
public class Organizer
{
private int id;
public virtual int Id
{
get { return id; }
set { id = value; }
}
private string fullName = "";
public virtual string FullName
{
get { return fullName; }
set { fullName = value; }
}
private List<Email> emails = new List<Email>();
public virtual List<Email> Emails
{
get { return emails; }
set { emails = value; }
}
}
public enum EmailType
{
Primary, Secondary
}
public class Email
{
private int iD;
public virtual int ID
{
get { return iD; }
set { iD = value; }
}
private string emailAddress = "";
public virtual string EmailAddress
{
get { return emailAddress; }
set { emailAddress = value; }
}
private EmailType emailType = EmailType.Primary;
public virtual EmailType EmailType
{
get { return emailType; }
set { emailType = value; }
}
private List<Organizer> organizers;
public virtual List<Organizer> Organizers
{
get { return organizers; }
set { organizers = value; }
}
}
И у меня есть следующая схема базы данных:
CREATE TABLE [dbo].[EmailAddresses](
[ID] [int] IDENTITY(1,1) NOT NULL,
[EmailAddress] [nvarchar](550) NULL
)
CREATE TABLE [dbo].[Organizers](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FullName] [nvarchar](550) NULL
)
CREATE TABLE [dbo].[Organizers_PrimaryKeys](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PrimaryKeyID] [int] NULL,
[PrimaryKeyTypeID] [int] NULL,
[OrganizerID] [int] NULL
)
Теперь у меня возникли серьезные проблемы с выяснением, как отобразить этос nhibernate (не свободно nhibernate).По сути, я хочу, чтобы он отображался таким образом, чтобы при выполнении «session.Save (anOrganizer)» данные иногда записывались в две таблицы, а иногда - в три.Например, скажем, у нас есть OrganizerA, и у него есть три электронных письма: email_1, email_2 и email_3.email_1 имеет EmailType.Primary, в то время как два других имеют EmailType.Secondary.Поэтому, когда мы сохраняем OrganizerA, происходит следующее:
- Сведения OrganizerA записываются в таблицу Organizer
- email_1, email_2 и email_3 все записываются в таблицу EmailAddresses (если онитам уже не существует)
- И в таблице Organizers_PrimaryKeys создается новая строка, в которой идентификатор email_1 записывается как PrimaryKeyID, а идентификатор OrganizerA записывается как OrganizerID (не беспокойтесь о PrimaryKeyTypeID.позже)
Так как, черт возьми, я могу сопоставить такие отношения?Пока у меня есть следующее:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="BLL"
namespace="BusinessLogic">
<class name="Organizer" table="Organizers">
<id name="Id">
<column name="ID"/>
<generator class="native" />
</id>
<property name="FullName">
<column name="FullName"/>
</property>
<bag name="Emails" table="Organizers_PrimaryKeys" inverse="false" cascade="all" lazy="true" >
<key column="Id"/>
<many-to-many class="Email" />
</bag>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="BLL"
namespace="BusinessLogic">
<class name="Email" table="EmailAddresses">
<id name="ID">
<column name="ID"/>
<generator class="native" />
</id>
<property name="EmailAddress" unique="true" type="string" >
<column name="EmailAddress"/>
</property>
</class>
</hibernate-mapping>
Я понятия не имею, что добавить в Email.hbm.xml для завершения этого «условного» отношения «многие ко многим».