#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 . Кроме того, в вашем примере нет связи между сообщением и блогом.