【发布时间】:2010-03-15 16:59:20
【问题描述】:
我正在创建一个域模型,其中实体通常(但不总是)具有ActionLog 类型的成员。
ActionLog 是一个简单的类,它允许对实例执行的操作进行审计跟踪。每个动作都记录为一个ActionLogEntry 实例。
ActionLog 的实现(大约)如下:
public class ActionLog
{
public IEnumerable<ActionLogEntry> Entries
{
get { return EntriesCollection; }
}
protected ICollection<ActionLogEntry> EntriesCollection { get; set; }
public void AddAction(string action)
{
// Append to entries collection.
}
}
我想要在我的实体中重用这个类,并根据它们记录的类将条目映射到不同的表。例如:
public class Customer
{
public ActionLog Actions { get; protected set; }
}
public class Order
{
public ActionLog Actions { get; protected set; }
}
这种设计在应用程序中适合我,但是我看不到一种清晰的方法可以将此场景映射到 NHibernate 的数据库。
我通常使用 Fluent NHibernate 进行配置,但我很乐意接受更通用的 HBM xml 中的答案。
【问题讨论】:
-
您是否有特殊原因希望每种类型的操作转到单独的表?
-
它更适合关系结构。相对而言,您有
Customers和CustomerActionLogEntries表。与此并行的是Orders和OrderActionLogEntries表。目前我的解决方案是拥有一个ActionLogEntries表并在NHibernate 中使用具有多对多关系的连接表。这对我的口味来说有点太规范化了,需要到处加入才能获得任何有意义的数据。 -
你有没有解决这个问题?我即将发布同样的问题。
-
我选择了阻力最小的路径,并使用单个表(对单个类型进行建模)和多个连接表(对关系进行建模)。
-
感谢您的回复。我找到了一个解决方案,可以让我利用我现有的设置。让我知道你的想法。
标签: nhibernate fluent-nhibernate