NHibernate: исключение отображения многих ко многим - PullRequest
1 голос
/ 06 октября 2011

У меня есть приложение c # .net 3.5, использующее NHibernate и MySQL.

Мои таблицы SQL расположены в виде шаблона «многие ко многим», связывающего строки конфигурации с задачами

CREATE TABLE `configstring` (
  `ConfigStringID` int(11) NOT NULL AUTO_INCREMENT,
  `ConfigString` varchar(45) NOT NULL,
  PRIMARY KEY (`ConfigStringID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `task_configstring` (
  `ConfigStringID` int(11) NOT NULL,
  `TaskID` int(11) NOT NULL,
  PRIMARY KEY (`ConfigStringID`,`TaskID`),
  KEY `TaskID` (`TaskID`),
  KEY `ConfigStringID` (`ConfigStringID`),
  CONSTRAINT `ConfigStringID` FOREIGN KEY (`ConfigStringID`) REFERENCES `configstring` (`ConfigStringID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `TaskID` FOREIGN KEY (`TaskID`) REFERENCES `task` (`TaskID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CREATE TABLE `task` (
  `TaskID` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`TaskID`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=latin1

У меня есть класс Task, который содержит список строк конфигурации, таких как:

public class Task
{
    public virtual IList<string> ConfigurationStrings { get; set; }
}

Отображение XML NHibernate для этого класса в базе данных выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="QueueTest"
                   namespace="Phoenix.Action">

    <class name="Task" table="queue_task">
        <id name="Id" column="TaskID" type="int" >
            <generator class="native"/>
        </id>

        <bag name="ConfigurationStrings" table="queue_task_configstring">
            <key column="TaskID"/>

            <many-to-many column="ConfigStringID"/>

        </bag>
    </class>

</hibernate-mapping>

Но, когда я звоню Configuration().BuildSessionFactory(), я получаю это исключение: An association from the table task_configstring does not specify the referenced entity

Как правильно выполнить сопоставление «многие ко многим» для объекта System.String?

1 Ответ

0 голосов
/ 06 октября 2011

У вас есть класс для ConfigString?

Вам не хватает имени класса в отображении "многие ко многим".

Создать новую сущность ConfigString:

class ConfigStringEntity
{
   public virtual int ConfigStringID { get; set; }

   public virtual string ConfigString { get; set; }
}

<many-to-many class="ConfigStringEntity" column="ConfigStringID"/>

Ваш список будет списком ConfigStringEntity.

public class Task
{
    public virtual IList<ConfigStringEntity> ConfigurationStrings { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...