ぎこちないタイトルはご容赦ください。言い方がよくわからない
私は実体を持っています、それを呼びましょうA。A毎週スプレッドシートから取得され、テーブルに保存されます。6週間前から取得したデータが、1週間前のスプレッドシートに含まれているため、スプレッドシートは累積されます。
現在、このデータは同じであり、変更する必要がない場合があります。時々それは変える必要があるでしょう。プライマリテーブルを最新のデータでいっぱいに保ちたい。つまり、エンティティが更新されると、古いエンティティが削除され、新しいエンティティがその場所に挿入されます。
Aエンティティが変更された場合、Guid、競合検出の日時、コメント、古いエンティティのコピー(変更内容などを確認できるようにするため)、および関連するものを作成しますConflict。Conflict競合。関連する競合は正常に機能しますが、古いエンティティを永続化する方法を知りたいです。
コンポーネントのマッピングを行うことはできますが、それはテーブルを爆発させるだけであり、これをより「きれいな」方法で行うことができると信じています。
私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でこれを行う方法はありますか?