我如何使用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; }
}
}
Run Code Online (Sandbox Code Playgroud)
映射xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NHibernateTutorial"
namespace="NHibernateTutorial">
<class name="Customer">
<cache usage="read-write"/>
<id name="CustomerId">
<generator class="native" />
</id>
<property name="FirstName" />
<property name="LastName" />
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
我的课程班
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<SqlClientDriver>();
x.Dialect<MsSql2012Dialect>();
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();
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中我从另一个表复制行,但我需要创建新行,我该怎么做?
这里的答案是:这不受支持.检查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);
Run Code Online (Sandbox Code Playgroud)
这是正确的方法,并将做你需要的
可能有趣的阅读:NHibernate - 可执行的DML
| 归档时间: |
|
| 查看次数: |
11475 次 |
| 最近记录: |