昨晚终于成功编译了 NHibernate 的 Examples, 不过马上又遇到新问题 ...

  前几天看了不少的关于 NHibernate / ORM 的文章,但是结果还是觉得糊里糊涂,对 NHibernate 的使用还是不太了解,经过寻思后,觉得是由于自己没有切实地体验 NHibernate 是怎么工作的, 于是决定看一看 NHibernate 自带的 Examples,打开后看了几眼,便决定要编译一下看看运行结果如何,可是我居然遇到问题了,编译竟然不通过,老是报错 "... NHibernate.snk 文件不存在或无法访问"。我在项目中搜索了 “NHibernate.snk”,发现一个配置文件里边果然有一行写着 <property value="..\NHibernate.snk" name="keyFile"></property>,于是搜索了整个 NHibernate 文件夹,结果没有发现这一文件。于是我只好向 Baidu 和 Google 求助了,搜索关键字“NHibernate.snk”,发现果然有不少人和我一样遇到这个问题了,同时我也找到了答案,原来这个 snk 文件是要自己用 VS.NET 的 sn 工具生成的。在 NHibernate 的官方论坛里我看到了这么一条指令 sn -k NHibernate.snk ,我猜这就是用来生成 NHibernate.snk 文件的吧,于是打开 cmd 输入上边的指令,果然在运行目录下生成了这个文件,将它复制到NHibernate目录的 src 目录和 src/NHibernate/obj 目录下,然后编译,耶!成功了!蛙蝦蝦。。。

  不过呢,好事多磨,我的学习过程似乎总是一路坎坷,问题是一个解决完一个又出现。我将 NHibernate.Examples-1.1 项目的输出类型转换成控制台程序,并在其中新建了一个 Examples 类,在其中测试 UserFixture 等类。代码如下:

using System;
using NHibernate.Examples.QuickStart;

namespace NHibernate.Examples
{
    
/// <summary>
    
/// Examples 的摘要说明。
    
/// </summary>

    public class Examples
    
{
        
public Examples()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
public static void Main(string[] args)
        
{
            
try
            
{
                UserFixture userFixture 
= new UserFixture();
                userFixture.ValidateQuickStart();
                Console.WriteLine(
"It runs successfully.");
            }

            
catch (Exception ex)
            
{
                Console.WriteLine(ex.Message);
            }

        }

    }

}

编译后运行发现,第一次运行是ok的,再运行一次就出错了。报错如下:could not synchronize database state with session,我想应该是因为 LoginId 是个主键的原因吧,但是这种错误该怎么避免呢,用 try-catch 吗?那么怎么才能知道出错的原因是主键冲突呢?我看上边的报错信息似乎不是这个意思啊。
posted on 2005-08-23 15:12  rocman  阅读(1145)  评论(3编辑  收藏  举报