我希望生成INSERT,其中包括NHibernate的主键(未生成)。如何映射Id列?

时间:2010-02-03 12:22:07

标签: nhibernate fluent-nhibernate nhibernate-mapping

我有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()设置映射,这样我就可以做我想做的事。

请帮忙。

1 个答案:

答案 0 :(得分:2)

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