通过代码使用NHibernate映射:当IDENTITY_INSERT设置为OFF时,无法在表'DietUser'中为identity列插入显式值

bre*_*ain 5 sql-server nhibernate nhibernate-mapping nhibernate-mapping-by-code

花了一段时间才找到答案,以为我会分享爱情.


当使用NHibernate通过代码与SQL Server的新映射时,我无法保存实体.保存实体时,将抛出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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道如何使用XML映射来映射它,但我希望尽可能使用代码内置的映射.

bre*_*ain 10

经过一些在论坛上挖掘后我很幸运,并找到了如何映射这个.Fabio提供示例非常好,如果您要使用GUID作为ID或类似的东西,但如果您想使用身份ID(也看到其他一些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);
    }
}
Run Code Online (Sandbox Code Playgroud)