避免在id更新nhibernate上对实体进行补液

时间:2014-04-01 20:08:03

标签: c# nhibernate

我有一种情况,我不想重新水化引用的对象,只想更新对象的id列。

public AppointmentMap() {

Table("appointment");   
Id(x => x.appointment_id).GeneratedBy.Identity().Column("appointment_id");
References(x => x.actiongroup).Column("appointment_actiongroup_id");
References(x => x.resource).Column("appointment_resource_id");
References(x => x.client).Column("appointment_client_id");

... Other fields

我希望能够在保存时更新appointment_client_id,但仍然有客户端对象用于显示目的。我不想使用DTO或其他构造做出异常情况,如果这种情况做了我需要的一切,除了我要通过设置其整数值来保存appointment_client_id的部分。我正在使用无会话事务,因为我运行的应用程序服务将包含一个Web服务,我不希望使用会话事务。

简短的问题是,您可以仅在不进行补液的情况下保存ID更改的对象。我的应用程序中有数百个地方需要它。

1 个答案:

答案 0 :(得分:1)

我们可以使用的技术是映射ReferenceReferenceId。其中一个必须标记为insert="false" update="false"

// readonly reference with all the stuff for querying
References(x => x.actiongroup)
  .Column("appointment_actiongroup_id")
  .Not.Insert().Not.Update();

// the only editable mapping
Map(x => x.actiongroupId, "appointment_actiongroup_id");

我使用反向方法,ReferenceId是readonly,因为现在很难在INSERT期间管理正确的ID ...但这是有效的