当我保存一个对象时,NHibernate会尝试将对象保存在id为0的数据库中



我有NHibernate——版本2.1.2.4000,并使用NHibernate.Mapping.Attributes

当我想保存对象时,比如

session.SaveOrUpdate(car);
session.Flush(); 

我有一个例外"当identity_insert设置为OFF时,无法在表'Car'中插入标识列的显式值当NHibernate尝试设置ID为0的sql脚本时,就会发生这种情况,就像一样

"exec sp_executesql N'INSERT INTO Car (...., Id) VALUES (.., @p12)',N'...,@p12 int', @p12=0 go"

我的类具有以下属性

public class Car: ILifecycle {
[Generator(Class = "identity")]
[Id(0, Name = "Id", Column = "Id")]
public virtual int Id { get; set; }  
public virtual LifecycleVeto OnDelete(ISession s);
public virtual void OnLoad(ISession s, object id);
public virtual LifecycleVeto OnSave(ISession s);
public virtual LifecycleVeto OnUpdate(ISession s);
}

Nhibernate助手具有以下设置

public class NhibernateHelper {
private readonly string _configurePath;
/// <param name="path"></param>
public NhibernateHelper(string path) {
_configurePath = path;
}
/// <summary>The session factory.</summary>
private static ISessionFactory SessionFactory;
/// <summary>Gets current session.</summary>
/// <returns>The current session.</returns>
public static ISession GetCurrentSession() {
return SessionFactory.OpenSession();
}
/// <summary>Connects to database 1.</summary>
public void ConnectToDb() {
var configuration = new Configuration();
configuration.Configure(_configurePath);

HbmSerializer.Default.Validate = true;
Stream s = HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly());
configuration.AddInputStream(s);

var assembly = Assembly.Load("DAL");
s = HbmSerializer.Default.Serialize(assembly);
configuration.AddInputStream(s);
SessionFactory = configuration.BuildSessionFactory();
}
public void CloseSessionFactory() {
if (SessionFactory != null)
SessionFactory.Close();
}
}

我忘记了属性之前的数字。[生成器(1,类="身份"(]

最新更新