5

我花了一段时间才找到答案,所以我想我会分享这份爱。


当通过 SQL Server 使用 NHibernate 的新代码映射时,我无法保存实体。保存实体时会抛出 System.Data.SqlClient.SqlException 并显示以下消息(减去表名):

“当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'DietUser' 中插入标识列的显式值。”

我的表使用身份 ID,实体和映射如下所示:

public class User
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Username { get; set; }
    public virtual string Password { get; set; }
    public virtual short DailyPoints { get; set; }
}

public class UserMapping : ClassMapping<User>
{
    public UserMapping()
    {
        Id(x => x.Id);
        Property(x => x.Name);
        Property(x => x.Username);
        Property(x => x.Password);
        Property(x => x.DailyPoints);
    }
}

我知道如何使用 XML 映射来映射它,但如果可能的话,我想通过代码使用内置映射。

4

3 回答 3

10

在论坛中进行了一些挖掘之后,我很幸运并找到了如何映射它。如果您要将 GUID 用于 ID 或类似的东西, Fabio 提供的示例非常棒,但如果您想使用身份 ID(也看到了一堆其他人),您需要指定您的生成器打算用。这是我更新的有效映射:

public class UserMapping : ClassMapping<User>
{
    public UserMapping()
    {
        Id(x => x.Id, map => map.Generator(Generators.Identity));
        Property(x => x.Name);
        Property(x => x.Username);
        Property(x => x.Password);
        Property(x => x.DailyPoints);
    }
}
于 2011-09-02T15:12:17.673 回答
1

说到身份id,如果设置了generator=identityNHibernate就不能批量插入了,因为需要额外的请求才能获取这个数据库生成的血腥id。

于 2012-04-06T09:41:54.563 回答
0

您是否尝试在持久化实体之前将值分配给 Id 属性?您可以添加尝试将更改持久化到数据库的代码片段吗?

当我开始学习 NHibernate 时,我在入门示例之后构建了一个小型演示。这里是。希望它有所帮助。

于 2011-09-02T14:40:58.927 回答