【问题标题】:NHibernate Insert Into TableNHibernate 插入表格
【发布时间】:2013-12-14 15:42:07
【问题描述】:

如何使用 CreateQuery() 向表中插入数据?

c#类

namespace NHibernateTutorial
{
    public class Customer
    {
        public virtual int CustomerId { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }           
    }
}

映射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>

我的节目课

    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();
                }

在此示例中,我从另一个表中复制行,但我需要创建新行,我该怎么做?

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    这里的答案是:不支持。检查13.3. DML-style operations,摘录:

    INSERT 语句的伪语法是:INSERT INTO EntityName 属性列表选择语句。需要注意的几点:

    • 仅支持 INSERT INTO ... SELECT ... 形式; 不是 INSERT INTO ... VALUES ... 表单
      ...
    • select_statement 可以是任何有效的 HQL 选择查询
      ...

    DML 背后的理念是您可以直接在数据库端进行操作。对于插入,值必须存在(某处)。

    但是适合您的情况的解决方案,请使用标准方式:

    var customer = new Customer();
    customer.FirstName ...
    session.Save(customer);
    

    这是正确的方法,会做你需要的

    可能会很有趣:NHibernate – Executable DML

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2010-12-14
      相关资源
      最近更新 更多