2010-01-11 87 views
2

我有一个主列作为ID的表。但是这一列不是一个身份专栏。所有的值都明确提供。我们可以停止自动递增的ID列吗?

下面是我的映射类

public ObjectTypeMap() 
    { 
     Table("OBJECTTYPE"); 
     Id(x => x.ObjectTypeId); 
     Map(x => x.Title).Not.Nullable(); 
     Map(x => x.Description); 
    } 

但是当我尝试使用session.save保存这个对象,我得到一个错误说

“无法将NULL值插入列‘ObjectTypeId’,表'DiscoveryWEBTest.dbo.ObjectType';列不允许为空,INSERT失败。\ r \ n该语句已被终止。“

但在我的对象中,我提供了ObjectTypeId的值。

问题是连贯NHibernate认为ID映射为自动增量列,但在数据库中ObjectTypeId不是一个标识列,这就是为什么插入语句没有得到任何值并引发空错误。

有没有一种方法可以告诉列是ID列,但其值不是自动递增的?

在此先感谢

回答

7

地图这样的:

Id(x => x.ObjectTypeId).GeneratedBy.Assigned(); 
+0

感谢那是什么我想要的。 我是新来的,仍然在探索它。 – Ashish 2010-01-11 11:02:01

+0

没问题。它实际上有点帮助我了解XML映射,或者至少了解它们。你会发现Fluent的等价物有相似的名字,但并不总是被记录在案。 – 2010-01-11 11:18:09