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

どうやらこれはIReferenceConventionを使用することで可能です:

public class CascadeNoneOverrideConvention : IReferenceConvention
{
    public void Apply(IManyToOneInstance instance)
    {
        // override
    }
}
于 2012-01-11T12:53:37.703 に答える
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 に答える