Переопределение FluentNHibernate DefaultCascade для многих типов одновременно
У меня есть абстрактный базовый класс сущности, определенный следующим образом:
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<> для каждого?
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();
}
}
По-видимому, это возможно с помощью IReferenceConvention:
public class CascadeNoneOverrideConvention : IReferenceConvention
{
public void Apply(IManyToOneInstance instance)
{
// override
}
}