Nhibernate объединение «один ко многим»

#nhibernate #nhibernate-mapping #associations #one-to-many

#nhibernate #nhibernate-сопоставление #ассоциации #один ко многим

Вопрос:

У меня есть такая простая модель:

 public abstract class Entity
{
    public virtual Guid Id { get; protected set;  }
}

public class Post : Entity
{
    public String Title { get ; set; }
    public String Content { get; set; }
    public DateTime Timestamp { get; set; }
    public Byte[] Thumbnail { get; set; }
}

public class Blog : Entity
{   
    public String Title { get; set; }
    public ISet<Post> Posts { get; set; }
}
  

Тогда у меня есть такие сопоставления:

BLOG

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true assembly="Application.Domain" namespace="Application.Domain.Entities">
  <class name="Blog">
    <!-- id generator -->
    <id name="Id">
      <generator class="guid.comb" />
    </id>
  <!-- properties/columns -->
  <property name="Title" not-null="true" />
  <!-- components/columns -->
  <!-- associations -->
  <set name="Posts" cascade="all">
     <!-- key column? -->       
  </set>
  </class>
</hibernate-mapping>
  

POST

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="Application.Domain" namespace="Application.Domain.Entities">
  <class name="Blog">
    <!-- id generator -->
    <id name="Id">
      <generator class="guid.comb" />
    </id>
    <!-- properties/columns -->
    <property name="Title" not-null="true" />
    <property name="Content" not-null="true" />
    <property name="Timestamp" not-null="true"/>
    <property name="Thmbnail" />
    <!-- components/columns -->
    <!-- associations -->
  </class>
</hibernate-mapping>
  

Как мне сопоставить ассоциацию «один ко многим» (однонаправленную)?

Спасибо!

Ответ №1:

В файле сопоставления блога вам нужно определить one-to-many отношение между столбцом внешнего ключа, который ссылается на Blog объект в таблице post, скажем, это, и вам нужно указать, к BlogId какому классу относится это отношение «один ко многим», в вашем случае это будет Post класс, и вам нужно определить его с помощьюэто полное пространство имен, которое содержит этот класс и запятую, а затем имя сборки следующим образом:

 <set name="Posts" table="Post">
  <key column="BlogId"/>
  <one-to-many class="Application.Domain.Entities.Post, Application.Domain"/>
</set>
  

Ответ №2:

Я думаю, что это та же проблема, что и описанная здесь.

А также, я думаю, у вас ошибка в сопоставлении имени Post-class, которое не должно быть Blog . Кроме того, в вашем примере нет связи между сообщением и блогом.