c# - Fluent NHibernate 生成和分配的 ID 列

标签 c# nhibernate fluent

我在 Web 应用程序中使用 Fluent NHibernate 进行数据持久化。

我的问题...我有一个基类,它使用 GeneratedBy().Identity() 映射所有具有 T 类型 ID 属性(几乎总是 int 或 GUID)的实体

在应用程序启动时,我有一个 Bootstrap 来检查和验证所需的种子数据是否已填充。我的问题是,一些填充的种子数据需要一个特定的 ID。 (对应于枚举或系统用户的 ID)

有什么方法可以强制 NHibernate 使用指定的 ID 提交记录,而不是使用自动生成的 ID?此后对存储库的任何其他提交都可以自动生成。

最佳答案

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

如果您希望应用程序分配标识符(而不是让 NHibernate 生成它们),您可以使用分配的生成器。这个特殊的生成器将使用已经分配给对象的标识符属性的标识符值。使用此功能分配具有业务意义的键时要非常小心(几乎总是一个糟糕的设计决策)。

由于其固有的性质,使用此生成器的实体无法通过 ISession 的 SaveOrUpdate() 保存方法。相反,您必须通过调用 Save() 显式指定 NHibernate 是否应保存或更新对象。或 Update() ISession 的方法.

http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-id-assigned

关于c# - Fluent NHibernate 生成和分配的 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048728/

相关文章:

c# - 使用 MySql 在 Asp.Net 中进行 NHibernate 映射

nhibernate - 流利的NHibernate映射可为空的枚举

nhibernate - Fluent NHibernate - 加入子类ForeignKey Name

C# 应用程序配置文件

c# - 如何让我的文本框捕获字符 为什么文本框不捕获输入

c# - Java - 通过 Web 服务和 XML 发送可能包含非法字符的 UTF-8 字符串

C# 奇怪的 lambda 行为

nhibernate - NHibernate中Session.Clear()的用途是什么?

c# - 给定一组点查找区域

c# - Fluent API 的类型推断