3

我有一个这样定义的抽象实体基类:

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<>?

4

2 回答 2

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();
    }
}
于 2012-01-11T13:02:26.343 回答
2

显然,这可以通过使用 IReferenceConvention 来实现:

public class CascadeNoneOverrideConvention : IReferenceConvention
{
    public void Apply(IManyToOneInstance instance)
    {
        // override
    }
}
于 2012-01-11T12:53:37.703 回答