【问题标题】:Commit in nhibernate在休眠中提交
【发布时间】:2014-07-01 03:18:36
【问题描述】:

我为 NHibernate 创建了简单的测试,但它不行。有谁知道下面这个麻烦。

PosDAL.Users 实例的标识符从 4 更改 (System.Int32) 到 0 (System.Int32)

我正在使用 Sql Server 2008。数据库中的用户表,ID 是主键并自动增加 1。在数据库中,我手动添加了简单的行,例如:用户名、电子邮件、全名、...等。 ID 是 4 。但它不起作用。我删除了那行,程序运行正常。

我在业务逻辑层的功能:

public bool CheckLogin(string sUsername, string sEnCodePassw)
        {
            using(ISession session = SessionFactory.OpenSession())
             using (ITransaction tx = session.BeginTransaction())
             {
                 IList oUser = 
                     session
                     .CreateSQLQuery("SELECT * FROM USERS WHERE U_USERNAME = ?")
                     .AddEntity(typeof(Users))
                     .SetString(0, sUsername)
                     .List();
                 tx.Commit();
                 return false;
             }
        }

【问题讨论】:

    标签: c# sql nhibernate


    【解决方案1】:

    您不需要进行选择事务,更不用说您不需要提交任何内容,因为您没有修改任何数据。所以,试着摆脱交易......

    using(ISession session = SessionFactory.OpenSession())
             {
                 IList oUser = 
                     session
                     .CreateSQLQuery("SELECT * FROM USERS WHERE U_USERNAME = ?")
                     .AddEntity(typeof(Users))
                     .SetString(0, sUsername)
                     .List();
                 return false;
             }
    

    还要确保您的代码逻辑确实做了它应该做的事情。目前你的代码总是返回false,你应该把return语句改成这样...

    return oUser != null && oUser.Count > 0;
    

    【讨论】:

    • 感谢您的推荐。我有另一个想法,但它返回错误:
      return oUser.Contains(sEnCodePassw);
      有什么问题吗?
    • 酷...我没有注意到您通过提问编辑了您的第一条评论
    • 这是我的解决方案:我改变了 - IList oUser = ...List() ; IList<Users> oUser = .....List<Users>();
      User oObject = new User();
      oObject = oUser[0];
      return (oObject != null && oObject.Password = sEncodePassw);
    猜你喜欢
    • 2010-11-16
    • 2015-05-14
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2011-07-28
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多