我有两个对象。其中一位父母引用了Locale。此语言环境来自语言环境列表。当该语言环境被删除时,我希望它从所有引用类型中清除对自身的任何引用(将相关值设置为空)。C#NHibernate - 删除所有对删除对象的引用
现在,我有一个系统遍历NHibernate映射的所有实体,并通过使用它们的类元数据确定哪些类型引用区域设置类型。然后,我为该引用类型构建一个查询(使用ICriteria),其中Locale类型的属性等于我尝试删除的区域设置的Id。任何返回的对象,我将该属性设置为null,然后更新它们。
问题:有没有更好的方法 - 希望使用内置NHibernate的东西 - 指示一个对象删除所有对自身的引用?
对象:
public class Parent
{
public virtual Guid Id { get; set; }
public virtual Locale Loc { get; set; }
}
public class Locale
{
public virtual Guid Id { get; set; }
}
映射:
public class ParentMapping : ClassMap<Parent>
{
Id(x => x.Id).GeneratedBy.Guid();
References(x => x.Loc).Nullable();
}
public class LocaleMapping : ClassMap<Locale>
{
Id(x => x.Id).GeneratedBy.Guid();
}
我认为你映射是错误的。两者都映射到。此关系中的小p父母是Locale。在映射中,引用是多对一的映射,其中语言环境是一个映射。你有没有想过如何使映射双向回到Locale?设置关系的级联。 –
Fran
我很抱歉。我知道我会在某个地方犯一个错字。我纠正了它。它应该是'LocaleMapping:ClassMap'。当你说双向时,你的意思是地区实体了解所有拥有它的父母,对吗? –
因为我知道所有拥有它的父母的地方实体,我避而远之的原因是它很难仅加载没有所有其他信息的Locale。我希望区域设置尽可能干净。 –