手动设置ID

发布于 2024-09-03 23:47:04 字数 728 浏览 2 评论 0原文

我有一个用户表,其中“ID”字段是 GUID 字段。

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

我遇到的问题是,当我手动设置 Users.ID 时,NHibernate 尝试执行更新,而不是插入。在 NHibernate Profiler 因“意外行数:0;预期:1”而崩溃之前,我看到了这一点。

我的 Users 表的 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");
    }
}

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

I have a Users table where the "ID" field is a GUID field.

Using ASPNET I am creating a user account and getting the GUID back. I am trying to create associated records in my tables with that GUID as the main ID.

The problem I am running into is that when I manually set Users.ID NHibernate tries to do an Update, not an Insert. I see this with the NHibernate Profiler before it bombs out with "Unexpected row count: 0; Expected: 1".

My UsersMap for the table Users looks like:

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");
    }
}

Any ideas? Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

压抑⊿情绪 2024-09-10 23:47:04

您需要指定将分配您的 ID

Id(x => x.ID)
  .GeneratedBy.Assigned();

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

You need to specify that your id will be assigned.

Id(x => x.ID)
  .GeneratedBy.Assigned();

This will allow you to specify the value, without NHibernate trying to perform an update.

森林散布 2024-09-10 23:47:04

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

ISession.Save has an overload that allows you to specify identifier. Try using it, and don't set your id property manually.

油焖大侠 2024-09-10 23:47:04

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

Id(x => x.ID)
  .GeneratedBy.Assigned()
  .UnsavedValue(default_value);

请注意,default_value 是您的 Id 类型的默认值
在我这里是 0L 因为我使用 long 作为我的 ID

As added value to James's answer I used:

Id(x => x.ID)
  .GeneratedBy.Assigned()
  .UnsavedValue(default_value);

Note that default_value is default value for your Id type
as in me is 0L because I use long for my Id

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文