手动设置ID

时间:2010-06-03 22:05:18

标签: fluent-nhibernate nhibernate-mapping

我有一个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");
    }
}

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

3 个答案:

答案 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作为我的身份