【问题标题】:NHibernate Insert into ... select ... with GUID as PrimaryKeyNHibernate Insert into ... select ... 使用 GUID 作为 PrimaryKey
【发布时间】:2012-07-16 18:04:29
【问题描述】:

我尝试使用 NHibernate 进行休闲:

this.Session.CreateQuery(@"insert into ContactGroupContact (Id, MailAddress, Company, Person, Branch, ContactGroup, User, FaxNumber)
                             select newid(), MailAddress, Company, Person, Branch, 
                                    :destContactGroupId, User, FaxNumber
                             from ContactGroupContact cgc
                             where cgc.ContactGroup.Id = :contactGroupId")
        .SetEntity("destContactGroupId", tempContactGroup)
        .SetGuid("contactGroupId", contactGroupId)
        .ExecuteUpdate();

ContactGroupContact 的列 Id 的类型为 GUID

当我执行此操作时,我会收到带有以下消息的 NHibernate.QueryException

节点没有数据类型:MethodNode ( ( newid exprList ) [insert into ContactGroupContact (Id, MailAddress, Company, Person, Branch, 联系人组、用户、传真号码) 选择 newid(), MailAddress, Company, Person, Branch, :destContactGroupId, User, FaxNumber 来自 ContactGroupContact cgc 其中 cgc.ContactGroup.Id = :contactGroupId]

谁能帮帮我,怎么了? - 谢谢。

【问题讨论】:

    标签: c# nhibernate hql


    【解决方案1】:

    尝试创建一个派生的Dialect 并将newid 注册为一个函数。

    【讨论】:

      【解决方案2】:

      这是 Diego 建议的一个示例。我承认我对此并不陌生,但假设这是处理它的适当方法(它有效)

      public class DerivedDialectWithNewId : MsSql2005Dialect
      {
          public DerivedDialectWithNewId()
          {
              RegisterFunction("newid", new NoArgSQLFunction("newid", NHibernateUtil.Guid, true));        
          }
      }
      

      这里是如何将它与 Fluent NHibernate 一起使用

      private static FluentConfiguration GetConfiguration()
          {
              return Fluently.Configure()
                  .Database(
                      MsSqlConfiguration.MsSql2005.ConnectionString(
                          c => c.FromConnectionStringWithKey("CustomConnectionString"))
                          .Dialect<DerivedDialectWithNewId>()));
          }
      

      【讨论】:

      • 如何使用 LINQ 调用它?
      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      相关资源
      最近更新 更多