我有以下类结构。
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无法引用,因为它未映射(我猜映射为组件的类型不被视为已映射?)。
我应该如何解决这个问题?