0

ぎこちないタイトルはご容赦ください。言い方がよくわからない

私は実体を持っています、それを呼びましょうAA毎週スプレッドシートから取得され、テーブルに保存されます。6週間前から取得したデータが、1週間前のスプレッドシートに含まれているため、スプレッドシートは累積されます。

現在、このデータは同じであり、変更する必要がない場合があります。時々それは変える必要があるでしょう。プライマリテーブルを最新のデータでいっぱいに保ちたい。つまり、エンティティが更新されると、古いエンティティが削除され、新しいエンティティがその場所に挿入されます。

Aエンティティが変更された場合、Guid、競合検出の日時、コメント、古いエンティティのコピー(変更内容などを確認できるようにするため)、および関連するものを作成しますConflictConflict競合。関連する競合は正常に機能しますが、古いエンティティを永続化する方法を知りたいです。

コンポーネントのマッピングを行うことはできますが、それはテーブルを爆発させるだけであり、これをより「きれいな」方法で行うことができると信じています。

Conflictは次のようにマッピングされています:

public class ConflictAMapping : ClassMap<Conflict<A>>
{
    public ConflictAMapping()
    {
        Id(c => c.Guid);
        Map(c => c.DateOfConflict);
        Map(c => c.Comment);
        HasMany(c => c.RelatedConflicts)
            .KeyColumn("ConflictKey")
            .Inverse()
            .Cascade.All()
            .Table("RelatedConflicts");
        References<A>(c => c.OriginalEntity)
            .Column("FK_IssueNumber")
            .Cascade.All();
    }
}

そして私のAマッピング

public class GSFEntityMapping : ClassMap<GSFEntity>
{
    public GSFEntityMapping()
    {

     ... unrelated properties blah blah ...
        HasMany(g => g.Conflicts).KeyColumn("theKey")
            .Table("Conflicts")
            .AsBag().Cascade.All()
    }
}

テーブルは次のConflictようになります。

Guid|DateOfConflict|CommentFK_IssueNumber|ConflictKey|theKey

Aテーブルには、競合に関連するものは何もありません(実際のプロパティのみ)。

では、どうすれば古いエンティティをマッピングできますか?古いエンティティ用に新しいクラスを生成するA必要がありますか、それともFluent / NHibernateでこれを行う方法はありますか?

4

1 に答える 1