我正在尝试使用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中检查它。
答案 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();
}
}