请原谅这个尴尬的标题。我不完全确定如何表达它
我有一个实体,我们称之为A
。A
每周从电子表格中提取,然后存储在表格中。电子表格是累积的,因为从 6 周前提取的数据包含在 1 周前的电子表格中。
现在,有时这些数据是相同的,不需要更改。有时它需要改变。我想让主表充满最新的数据。也就是说,随着实体的更新,过时的实体将被删除,并在其位置插入较新的实体。
当一个A
实体发生变化时,我创建一个Conflict
, 这样它Conflict
就有一个 Guid、一个冲突发现的 DateTime、一个注释和一个旧实体的副本(以便我们可以看到发生了什么变化等等),以及相关的冲突。相关的冲突工作正常,但是我想知道如何保留旧实体。
我可以做一个组件映射,但这只会让表格爆炸,我相信我可以以更“漂亮”的方式做到这一点。
我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 中做到这一点?