2011-10-15 17 views
0

我有这样一个简单的模型:NHibernate的一个-to-many关联

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

在您需要定义引用Blog实体在后表的外键列之间的one-to-many关系的博客映射文件说,这是BlogId,你需要什么tell'em这一类一个一对多的关系在你的情况下,这将是Post类,你需要用它的完全合格的命名空间来定义它,它包含这个类和一个逗号,然后程序集名称如下:

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

我认为这与here的描述是一样的问题。

而且,我认为你在Post-class名称的映射中有一个错误,不应该是Blog。另外,在你的例子中,从发布到博客没有任何关系。