流利的NHibernate新手:Row被另一个交易更新或删除

Pet*_*ron 1 sql-server fluent-nhibernate asp.net-mvc-3

我正处于使用Fluent NHibernate构建数据库的早期阶段.我在ASP.NET MVC 3中实现了一个工作单元模式,让NHibernate为我更新我的数据库模式.为了插入/更新我的初始数据,我有一个Database控制器,其中一个Update操作尝试将SaveOrUpdate(...)一个User实体(管理员用户)放入Users表中.

通过Visual Studio手动删除所有用户记录并重新运行我的Update操作以重新填充Users表后,我收到以下NHibernate.StaleObjectStateException异常:

Row was updated or deleted by another transaction (or unsaved-value mapping was
incorrect): [Invoicer.Data.Entities.User#3105248d-ca91-4c64-bf8f-9ebb017943b7]

Line 26:        {
Line 27:            if (_transaction.IsActive)
Line 28:                _transaction.Commit();
Line 29:        }
Run Code Online (Sandbox Code Playgroud)

注意:保存或更新的用户ID是Guid,其值大于(3105 ...).

我究竟做错了什么?

Pet*_*ron 12

通过映射解决

NHibernate使用Guid梳子方法为我分配用户ID(Guid).手动指定ID会使映射绊倒.我更喜欢自己分配这些ID,因此我将User实体ID映射更改为在我的UserMap类中手动分配:

Id(x => x.Id).GeneratedBy.Assigned();
Run Code Online (Sandbox Code Playgroud)

  • 当您在创建实体时尝试设置实体的ID时,也会发生这种情况.NH应使用映射规则定义ID. (2认同)