C# 避免id更新nhibernate时实体的再水化

C# 避免id更新nhibernate时实体的再水化,c#,nhibernate,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 =

在这种情况下,我不想对引用的对象进行再水化,只想更新对象上的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
我希望能够在保存时更新约会\u客户端\u id,但仍有用于显示目的的客户端对象。我不想使用DTO或其他构造进行异常情况,如果这种情况可以满足我的所有需要,除了我希望通过设置其整数值来保存约会客户id的部分。我使用的是无会话事务,因为我运行的应用程序服务将使用web服务包装,所以我不希望使用会话事务


简短的问题:您是否可以只保存id发生更改的对象,而不进行再水化。在我的应用程序中有数百个地方需要它。

我们可以使用的一种技术是同时映射:
Reference
ReferenceId
。其中一个必须标记为
insert=“false”
update=“false”


我使用反向方法,引用ID是只读的,因为现在在插入过程中很难管理正确的ID。。。但这是可行的

到目前为止,这似乎是唯一的办法。我花了几个小时尝试了所有类型的事情,最终找到了相同的解决方案。我很想知道这样做是否有负面影响。我将在明天测试更多此解决方案,因为我的电池在我看到此解决方案正常工作后立即耗尽。到目前为止,您似乎已经找到了唯一的解决方案。我使用double(reference和referencedId)映射已经很长时间了。它正在工作。对您来说,还有什么更好的方法-将引用设置为允许插入(),但不允许.Update(),-并将referenceId设置为不允许.Insert()-但允许更新()。。。简单地说,我们可以玩;)享受NHibernate我知道这对你来说可能很明显,但请告诉我,如果我是正确的,这将允许我创建一个新的引用实体并将其插入,但我将丢失对这些实体的更新。但我得到的是通过允许我更新引用的实体来改变我指向的实体。我可能不会编辑引用的对象,因为我在web服务上使用nhibernate的存储库方法,并且使用映射来减少数据检索的工作量。但是只要测试它,在很少的“调整”实体和引用上创建一些单元测试。。。这种行为应该不会让你感到惊讶;)
// 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");