【问题标题】:I want generate INSERT which include my Primary Key (not generated) by NHibernate. How to map Id column for this?我想生成包含 NHibernate 的主键(未生成)的 INSERT。如何为此映射 Id 列?
【发布时间】:2010-02-03 22:16:53
【问题描述】:

我有表CUSTOMER,其中CUSTOMER_ID 是主键。

表格

CREATE TABLE [CUSTOMER](
    [CUSTOMER_ID] [int] NOT NULL,
    [START_DATE] [varchar(30)] NOT NULL,
CONSTRAINT [PK_CUSTOMER] PRIMARY KEY CLUSTERED ( [CUSTOMER_ID] ASC .....

映射

public class CustomerMap : ClassMap<Customer> {
    public CustomerMap()
    {
        WithTable("CUSTOMER");
        Id(x => x.CustomerID, "CUSTOMER_ID");
        Map(x => x.Name, "NAME");
    }
}

我需要手动处理 CustomerID 属性的分配。例如,我创建了 CustomerID = 777 并命名为“stackoverflow”的新客户。

当我调用方法 Session.SaveOrUpdate(customer); 我希望 NHibernate 像这样生成我的 SQL:

INSERT INTO [CUSTOMER] ([CUSTOMER_ID] ,[NAME]) VALUES (777,'stackoverflow')

很遗憾,我遇到了错误。

这里的主要问题是 Nhibernate 尝试为我生成 ID。但我想用 777 完全保存我的实体。

我认为应该有另一种方式为 Id() 设置映射,这样我就可以做我想做的事了。

请帮忙。

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    根据您执行 NHibernate 映射(流利或 hbm)的方式,您可以设置 ID 属性以手动分配 id。我相信默认是让服务器分配id。

    【讨论】:

    • 谢谢。我的问题的答案是通过添加 GeneratedBy.Assigned(); 手动设置我的 ID 属性。像这里: Id(x => x.CustomerID, "CUSTOMER_ID") .GeneratedBy.Assigned();我认为我的情况很特别。
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2015-08-24
    • 2017-07-06
    相关资源
    最近更新 更多