如果NHibernate 3.1破坏了我的代码?

时间:2011-03-18 10:42:15

标签: nhibernate

我最近下载并安装了NHibernate 3.1。我在3.0安装中复制了2个新的DLL。问题1:这就是我需要做的全部吗?

在我的系统中,我已经实现了一个自定义id生成器,它可以使用3.0,但是我得到一个错误'无法解释id生成器策略',没有进行其他更改。问题2:3.1中我在3.0中做了什么不再有效?

以下是我的自定义生成器类的示例。

public class IdGenerator : TableGenerator
{
    public override object Generate(ISessionImplementor session, object obj)
    {
        if(session.Connection.ToString().ToLower().IndexOf("sqlclient") > 0)
        {
            IQuery query = session.GetNamedSQLQuery("GenerateSQLServerId");
            return Convert.ToInt32(query.UniqueResult());
        }
        else if (session.Connection.ToString().ToLower().IndexOf("oracle") > 0)
        {
            IQuery query = session.GetNamedSQLQuery("GenerateOracleId");
            return query.List()[0];
        }

        return null;
    }
}

在我的hbm.xml文件中,我有:

<id  name="Id"   column="ID"  type="int">
  <generator class="Namespace.IdGenerator, Namespace" />
</id>

就像我说的,这一切都适用于3.0,但不是3.1。也许这是一个安装问题......任何想法?

1 个答案:

答案 0 :(得分:0)

问题#1 - 这就是我所做的一切,看起来我现在在3.1版本上。

问题#2 - 我使用类库来托管NHibernate的所有功能,然后在我将新方法实现到系统之前测试一个consolse应用程序。我在我的控制台应用程序中将References更改为3.1并忘记在我的类库中执行相同操作。一旦我得到两个相同的版本错误信息'无法解释id生成器策略'消失了,一切正常。我的自定义生成器有没有错。