我有一个像这样定义的抽象实体基类:
public abstract class SessionItem : Entity
{
public virtual Session Session { get; set; }
}
此外,我使用自动映射:
private AutoPersistenceModel CreateAutomappings()
{
return AutoMap
// configuration
.Conventions.Add(DefaultCascade.All())
// more configuration
}
SessionItem
有几个派生类/表,我想覆盖所有这些的级联策略。我尝试了以下方法:
public class SessionItemAutommapingOverride : IAutoMappingOverride<SessionItem>
{
public void Override(AutoMapping<SessionItem> mapping)
{
mapping.References(x => x.Session).Cascade.None();
}
}
但遗憾的是,由于SessionItem
是抽象的(并且未映射),因此不会调用覆盖。我宁愿避免为每个子类重写它(使用IAutoMappingOverride)。
有没有办法覆盖多种类型的级联,而不使用IAutoMappingOverride&lt;&gt;对于每一个?
答案 0 :(得分:2)
显然,这可以通过使用IReferenceConvention来实现:
public class CascadeNoneOverrideConvention : IReferenceConvention
{
public void Apply(IManyToOneInstance instance)
{
// override
}
}
答案 1 :(得分:2)
public class SessionReferenceCascadeNone : IReferenceConvention, IReferenceConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IManyToOneInspector> criteria)
{
criteria.Expect(x =>
typeof(SessionItem).IsAssignableFrom(x.EntityType) &&
x.Property.PropertyType == typeof(Session));
}
public void Apply(IManyToOneInstance instance)
{
instance.Cascade.None();
}
}