Я очень, очень новичок в nhibernate, и я уверен, что есть много очевидных вещей, которые я пропускаю здесь, но я искал ответ в течение нескольких дней и просто не могу найти решение, которое соответствует моей конкретной проблеме. Я очень, очень ценю вашу помощь.
Сначала я опишу свою проблему, а затем отправлю код:
В моей объектной модели у меня есть «Событие» с IList «Организатор». Я хочу использовать nhibernate, чтобы при выполнении сеанса «session.Save (anEvent)» данные записывались в три таблицы в базе данных: «События», «Организаторы» и «Организаторы_ события» (таблица соединения). Когда я использую приведенный ниже код, я получаю следующую ошибку:
Invalid column name 'EventID'
Мой код:
Во-первых, файлы .hbm:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="BLL"
namespace="BusinessLogic">
<class name="Event" table="Events">
<id name="EventID">
<column name="ID"/>
<generator class="native" />
</id>
<property name="Name">
<column name="Name"/>
</property>
<bag name="Organizers" table="Organizers_Events" inverse="false" cascade="all-delete-orphan" lazy="true" access="nosetter.camelcase-underscore" >
<key column="EventID"/>
<one-to-many class="Organizer" />
</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="Organizer" table="Organizers">
<id name="Id">
<column name="ID"/>
<generator class="native" />
</id>
<property name="FullName">
<column name="FullName"/>
</property>
<many-to-one name="TheEvent" column="EventID" />
</class>
</hibernate-mapping>
Далее объекты:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for Event
/// </summary>
///
namespace BusinessLogic
{
public class Event
{
private int eventID;
public virtual int EventID
{
get { return eventID; }
set { eventID = value; }
}
private IList<Organizer> _organizers = null;
public virtual IList<Organizer> Organizers
{
get { return _organizers; }
set { _organizers = value; }
}
public Event()
{
//
// TODO: Add constructor logic here
//
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BusinessLogic
{
public class Organizer:Invitee
{
private Event theEvent = new Event();
public virtual Event TheEvent
{
get { return theEvent; }
set { theEvent = value; }
}
}
}
И, наконец, схема базы данных:
CREATE TABLE [dbo].[Events](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Organizers](
[ID] [int] IDENTITY(1,1) NOT NULL,
[FullName] [nvarchar](550) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Organizers_Events](
[OrganizerID] [int] NOT NULL,
[EventID] [int] NOT NULL
) ON [PRIMARY]
Я вырезал ненужные данные, чтобы упростить проблему. Я не думаю, что какие-либо другие вещи влияют на мою проблему здесь. Для наших целей я просто хочу, чтобы объект Event записывал свои EventID и Name в таблицу Events, каждый объект организатора в IList записывает свой ID и FullName в таблицу Organizers, а EventID и ID Organizer записываются в Таблица Organizer_Events.
Что я делаю не так? Если это много, пожалуйста, скажите мне. Или, если в сети уже есть ответ, который я пропустил, направьте меня к нему.