我有以下类结构。
public class SearchTarget : IEntity {
public virtual String Name { get; set; }
}
public partial class PoliceAssistance {
public virtual Search SearchWithWarrant { get; set; }
public virtual Search SearchWithoutWarrant { get; set; }
public class Search : IEntityComponent {
public virtual IList<SearchTarget> Targets { get; set; }
}
}
IEntityComponent
确保PoliceAssistance.Search
在 Fluent NHibernate 自动映射中被视为一个组件,也就是说,SearchWithWarrant
它们SearchWithoutWarrant
存储在同一个PoliceAssistance
表中。
问题
PoliceAssistance.Search.Targets
并且SearchTarget
必须具有多对多关系——一个搜索可以包含多个目标,一个目标可以出现在多个搜索中。
如果我在 上指定单向.HasManyToMany()
映射PoliceAssistance.Search
,当我尝试保存实体时,我会得到“空值违反非空约束”——即使两者都SearchWithWarrant
被SearchWithoutWarrant
实例化并且列表中至少有一个Target
。
如果我尝试双向指定映射,通过引入public virtual IList<PoliceAssistance.Search> InSearches { get; set; }
属性SearchTarget
并将其映射到.HasManyToMany().Inverse()
,我会收到一个映射错误,指出PoliceAssistance.Search
无法引用,因为它未映射(我猜映射为组件的类型不被视为已映射?)。
我应该如何解决这个问题?