NHibernate插入..选择GUID作为PrimaryKey



我试着用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)[插入到ContactGroupContact(Id,MailAddress,Company,Person,Branch,联系人组、用户、传真号码)选择newid(),MailAddress,Company,Person,Branch,:destContactGroupId,User,FaxNumber来自ContactGroupContact cgc其中cgc。ContactGroup.Id=:contactGroupId]

有人能帮我吗,怎么了?-谢谢

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

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

最新更新