我试着用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>()));
}