NHibernate UPDATE不起作用

时间:2014-01-21 15:15:08

标签: nhibernate

我正在尝试使用NHibernate更新我的记录。到目前为止,我只创建了SELECT语句。现在我需要做一个更新,我似乎无法使它工作。

这是我正在调用的简化函数。

    public void UpdateDataEditedInDrobneAwarieGrid()
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {

                    string query = "UPDATE [MESdb].[dbo].[LogIn] SET Uzytkownik='a..' WHERE ID=3";

                session.CreateSQLQuery(query);

                transaction.Commit();
            }
        }
    }

NHibernateHelper:

 public class NHibernateHelper
{

    private static ISessionFactory _sessionFactory;

    private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
            {

                var NHibernateConfig = new Configuration();
                NHibernateConfig.Configure(HttpContext.Current.Server.MapPath(
                @"~\Models\NHibernate\hibernate.cfg.xml"), "MESdb");
                NHibernateConfig.AddDirectory(new System.IO.DirectoryInfo(HttpContext.Current.Server.MapPath(
                @"~\Models\NHibernate\Mapping")));
                _sessionFactory = NHibernateConfig.BuildSessionFactory();
            }
            return _sessionFactory;
        }
    }

    public static ISession OpenSession()
    {
        return SessionFactory.OpenSession();
    }
}

关于可能出错的任何想法?

SQL语句没问题。在MSSQL Server中检查它。

2 个答案:

答案 0 :(得分:2)

要执行 UPDATE 作为session.CreateSQLQuery(query);的一部分,我们必须明确调用ExecuteUpdate();

session.CreateSQLQuery(query)
  .ExecuteUpdate();

答案 1 :(得分:1)

通常,您将使用对象而不是编写SQL,例如:

public void UpdateDataEditedInDrobneAwarieGrid()
{
    using (ISession session = NHibernateHelper.OpenSession())
    using (ITransaction transaction = session.BeginTransaction())
    {
        var login = session.Get<LogIn>(3);
        login.Uzytkownik = "a..";
        transaction.Commit();
    }
}