ぎこちないタイトルはご容赦ください。言い方がよくわからない
私は実体を持っています、それを呼びましょう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でこれを行う方法はありますか?