21

Fluent NHibernate で AutoMap Persistence Model を使用してカスケード保存を「オン」にするにはどうすればよいですか?

次のように:

私は人物を保存し、アームも保存する必要があります。現在、私は得る

「オブジェクトは保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存してください」

public class Person : DomainEntity
{
  public virtual Arm LeftArm { get; set; }
}

public class Arm : DomainEntity
{
  public virtual int Size { get; set; }
}

このトピックに関する記事を見つけましたが、古くなっているようです。

4

5 に答える 5

13

これは、新しい構成ビットで機能します。詳細については、http://fluentnhibernate.wikia.com/wiki/Converting_to_new_style_conventionsを参照してください。

//hanging off of AutoPersistenceModel    
.ConventionDiscovery.AddFromAssemblyOf<CascadeAll>()


public class CascadeAll : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
    public bool Accept( IOneToOnePart target )
    {
        return true;
    }

    public void Apply( IOneToOnePart target )
    {
        target.Cascade.All();
    }

    public bool Accept( IOneToManyPart target )
    {
        return true;
    }

    public void Apply( IOneToManyPart target )
    {
        target.Cascade.All();
    }

    public bool Accept( IManyToOnePart target )
    {
        return true;
    }

    public void Apply( IManyToOnePart target )
    {
        target.Cascade.All();
    }
}
于 2009-03-19T21:04:41.460 に答える
13

現在のバージョンで使用するために更新されました:

public class CascadeAll : IHasOneConvention, IHasManyConvention, IReferenceConvention
{
    public void Apply(IOneToOneInstance instance)
    {
        instance.Cascade.All();
    }

    public void Apply(IOneToManyCollectionInstance instance)
    {
        instance.Cascade.All();
    }

    public void Apply(IManyToOneInstance instance)
    {
        instance.Cascade.All();
    }
}
于 2010-03-15T14:26:59.397 に答える
4

プロジェクト全体でこれを行う最も簡単な方法は、DefaultCascadeを使用することです。

.Conventions.Add( DefaultCascade.All() );     

これについては、wikiの「The Simplest Conventions」セクションに移動し、その他のリストを参照してください。

ウィキからのリストは次のとおりです。

Table.Is(x => x.EntityType.Name + "Table")
PrimaryKey.Name.Is(x => "ID")
AutoImport.Never()
DefaultAccess.Field()
DefaultCascade.All()
DefaultLazy.Always()
DynamicInsert.AlwaysTrue()
DynamicUpdate.AlwaysTrue()
OptimisticLock.Is(x => x.Dirty())
Cache.Is(x => x.AsReadOnly())
ForeignKey.EndsWith("ID")

警告の言葉 - Wiki のメソッド名のいくつかは間違っている可能性があります。確認できるもの (つまり、DefaultCascade と DefaultLazy) で Wiki を編集しましたが、残りは保証できません。ただし、必要に応じて、Intellisense を使用して適切な名前を見つけられるはずです。

于 2011-11-03T22:15:09.817 に答える
3

コンベンション メソッド シグネチャが変更されました。この質問が求めることを正確に行う新しい回答については、THIS QUESTIONを参照してください。

于 2010-02-11T17:54:47.903 に答える