2009-01-25 59 views
0

NHibernate正在推动我'坚果'!NHibernate映射的困境 - “未知实体类:System.Int64”

我有以下映射。 当我尝试将记录添加到数据库时,会返回此错误。 “未知的实体类:System.Int64”

<class name="CalConnector" table="tb_calConnectors" lazy="false" > 
<id name="id" column="id"> 
    <generator class="hilo"/> 
</id> 
<many-to-one name="calendarID" class="Calendar" lazy="false" cascade="save-update"> 
    <column name="calendarID" sql-type="bigint" not-null="false"/> 
</many-to-one> 

我设置映射像这样,所以当我生成使用映射文件和本外键是设置模式; CONSTRAINT [FK94A85A28236EBB2B] FOREIGN KEY ([calendarID]) REFERENCES [dbo].[tb_calendars] ([id])

我生成的模式,一切都很好。 现在,当我尝试添加一个CalConnector引用一个现有的日历ID 我收到一个错误。 如果我拿出多对一的关系; 即:

<property name="calendarID"/> 

我可以创造纪录,但是当NHibernate的生成模式未设置外键。

这需要我花几个小时来设置一些简单的CRUD东西。我希望NHibernate能为我获得正确的所有时间提供一些回报。

如果任何人都可以发现问题,请给我一个提示,然后我可以做到这一点,并有一个应得的啤酒。 任何帮助* 2赞赏。

回答

1

我不会推荐您将calendarId作为多对多标记中的名称,name属性必须是包含日历的属性的名称,即name =“Calendar”。另一部分似乎没问题,但我不认为指定sql-type有所帮助,这可以防止数据库混淆,因为会覆盖hbm2ddl类型的变形。所以,你可以试试下面的映射:

<class name="CalConnector" table="tb_calConnectors" lazy="false" > 
    <id name="id" column="id"> 
    <generator class="hilo"/> 
    </id> 
    <many-to-one name="Calendar" class="Calendar" lazy="false" cascade="save-update" column="calendarId" not-null="false" /> 
</class> 

记住CalConnector必须有一个虚拟财产的日历称为日历使用此对应关系。