我如何使用CreateQuery()将数据插入表?
c#class
namespace NHibernateTutorial { public class Customer { public virtual int CustomerId { get; set; } public virtual string FirstName { get; set; } public virtual string LastName { get; set; } } }
映射xml
我的课程班
var configuartion = new Configuration(); configuartion.DataBaseIntegration(x => { x.ConnectionString = @"Data Source=NH;Initial Catalog=NHibernate;Integrated Security=False;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False"; x.Driver(); x.Dialect (); x.LogFormattedSql = true; x.LogSqlInConsole = true; x.AutoCommentSql = true; }); configuartion.AddAssembly(Assembly.GetExecutingAssembly()); var sessionFactory = configuartion.BuildSessionFactory(); using (var session = sessionFactory.OpenSession()) { var query = session.CreateQuery("INSERT INTO Customer (FirstName, LastName) select i.FirstName, i.LastName from CustomerOld i"); query.ExecuteUpdate(); }
在这个例子中我从另一个表复制行,但我需要创建新行,我该怎么做?
这里的答案是:这不受支持.检查13.3.DML风格的操作,一个提取:
INSERT语句的伪语法是:INSERT INTO EntityName properties_list select_statement.有些要点需要注意:
仅支持INSERT INTO ... SELECT ...表单; 不是INSERT INTO ... VALUES ...形式.
...select_statement可以是任何有效的HQL选择查询
...
DML背后的想法是你直接在数据库端进行操作.对于插入,值必须在某处(某处).
但有是你的情况的解决方案,使用标准的方法:
var customer = new Customer(); customer.FirstName ... session.Save(customer);
这是正确的方法,并将做你需要的
可能有趣的阅读:NHibernate - 可执行的DML