Fluent nhibernate 手动设置ID

Fluent nhibernate 手动设置ID,fluent-nhibernate,nhibernate-mapping,Fluent Nhibernate,Nhibernate Mapping,我有一个Users表,其中“ID”字段是GUID字段 使用ASPNET,我正在创建一个用户帐户并获取GUID。我正在尝试在表中创建以该GUID为主ID的关联记录 我遇到的问题是,当我手动设置Users.ID时,NHibernate尝试执行更新,而不是插入。我在NHibernate探查器中看到了这一点,然后它以“意外的行计数:0;预期:1”的方式爆炸出来 表用户的My UsersMap如下所示: public class UsersMap : ClassMap<Users> {

我有一个Users表,其中“ID”字段是GUID字段

使用ASPNET,我正在创建一个用户帐户并获取GUID。我正在尝试在表中创建以该GUID为主ID的关联记录

我遇到的问题是,当我手动设置Users.ID时,NHibernate尝试执行更新,而不是插入。我在NHibernate探查器中看到了这一点,然后它以“意外的行计数:0;预期:1”的方式爆炸出来

表用户的My UsersMap如下所示:

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");
    }
}
公共类用户映射:类映射
{
公共用户smap()
{
Id(x=>x.Id,“Id”);//GUID
Map(x=>x.Name,“Name”);//字符串
Map(x=>x.PhoneNumber,“PhoneNumber”);//字符串
映射(x=>x.FaxNumber,“FaxNumber”);//字符串
Map(x=>x.EmailAddress,“EmailAddress”);//字符串
HasMany(x=>x.usersAddressBook).KeyColumn(“ID”);
}
}

有什么想法吗?提前感谢。

ISession.Save有一个重载,允许您指定标识符。请尝试使用它,不要手动设置id属性。

您需要指定您的id将被分配


这将允许您指定值,而无需NHibernate尝试执行更新。

作为我使用的James答案的附加值:

Id(x => x.ID)
  .GeneratedBy.Assigned()
  .UnsavedValue(default_value);
请注意,默认值是Id类型的默认值

在我身上是
0L
,因为我对我的Id使用
long
,这似乎是最好的方法。它也可以完美地工作。谢谢你的帮助。
Id(x => x.ID)
  .GeneratedBy.Assigned()
  .UnsavedValue(default_value);