在我使用引用中的接口而不是具体类的特定情况下,我找不到如何使用自动化约定来设置NHibernate以检测我的多对多关系。请注意,这与One-To-Many和Many-To-One案例完美配合。 好吧,例如我有两个实体:
public class Model4 : ModelBase, IModel4
{
public Model4()
{
Model5s = new List<IModel5>();
}
public virtual ValueInt D { get; set; }
public virtual IList<IModel5> Model5s { get; set; }
}
public class Model5 : ModelBase, IModel5
{
public Model5()
{
Model4s = new List<IModel4>();
}
public virtual ValueInt E { get; set; }
public virtual IList<IModel4> Model4s { get; set; }
}
其中接口定义为:
public interface IModel4 : IModelBase
{
ValueInt D { get; set; }
IList<IModel5> Model5s { get; set; }
}
public interface IModel5 : IModelBase
{
ValueInt E { get; set; }
IList<IModel4> Model4s { get; set; }
}
我正在使用引用约定来在映射时将接口转换为类实现:
public class ReferenceConvention : IReferenceConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IManyToOneInstance instance)
{
Type instanceType = instance.Class.GetUnderlyingSystemType();
if (instanceType.IsInterface)
{
// Assuming that the type starts with an I get the name of the concrete class
string className = instanceType.Name.Substring(1);
instance.CustomClass(instanceType.Assembly.GetType(
instanceType.FullName.Replace(instanceType.Name, className)));
}
instance.Cascade.All();
}
}
我希望NHibernate能够检测到model4&lt; - &gt; model5多对多关系并调用我的ManyToMany约定:
public class ManyToManyConvention : IHasManyToManyConvention
{
public void Apply(IManyToManyCollectionInstance instance)
{
//this code is not reached when using references through interfaces
}
}
在我使用带接口的引用(IList和IList)的情况下,NHibernate永远不会调用ManyToManyConvention的Apply方法。
但是,如果我使用具体实现(IList和IList),则调用Apply代码并按预期完成映射。
你知道我在哪里错过我错误的地方吗?