Переопределение FluentNHibernate DefaultCascade для многих типов одновременно - PullRequest
3 голосов
/ 11 января 2012

У меня есть абстрактный базовый класс сущности, определенный следующим образом:

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 ]

2 голосов
/ 11 января 2012
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();
    }
}
2 голосов
/ 11 января 2012

Видимо, это возможно при использовании IReferenceConvention:

public class CascadeNoneOverrideConvention : IReferenceConvention
{
    public void Apply(IManyToOneInstance instance)
    {
        // override
    }
}
...