我有一个Users表,其中“ID”字段是GUID字段。
使用ASPNET我正在创建一个用户帐户并重新获取GUID。我正在尝试使用该GUID作为主ID在我的表中创建关联记录。
我遇到的问题是,当我手动设置Users.ID时,NHibernate尝试进行更新,而不是插入。我用NHibernate Profiler看到这个,然后用“意外行数:0;预期:1”进行轰炸。
表格的用户地图用户看起来像:
public class UsersMap : ClassMap<Users>
{
public UsersMap()
{
Id(x => x.ID, "ID"); //GUID
Map(x => x.Name, "Name"); //string
Map(x => x.PhoneNumber, "PhoneNumber"); //string
Map(x => x.FaxNumber, "FaxNumber"); //string
Map(x => x.EmailAddress, "EmailAddress"); //string
HasMany<UsersAddressBook>(x => x.usersAddressBook).KeyColumn("ID");
}
}
有什么想法吗?提前谢谢。
答案 0 :(得分:17)
您需要指定您的ID 已分配。
Id(x => x.ID)
.GeneratedBy.Assigned();
这将允许您指定值,而NHibernate不会尝试执行更新。
答案 1 :(得分:1)
ISession.Save有一个允许您指定标识符的重载。尝试使用它,不要手动设置id属性。
答案 2 :(得分:0)
作为詹姆斯答案的附加值我用过:
Id(x => x.ID)
.GeneratedBy.Assigned()
.UnsavedValue(default_value);
请注意,default_value是您的Id类型的默认值
和我一样0L
,因为我使用long
作为我的身份