我们正在使用Nhibernate作为数据访问层开发应用程序。
我正在努力解决的一件事就是找到一种方法将2个对象映射到同一个表。
我们有一个适合数据输入的对象,另一个用于更多批处理过程。
该表包含数据条目的所有列以及批处理过程的一些其他信息。
当它处于批处理过程中时,我不想仅将所有数据加载到子集中,但我希望能够更新表中的值。
nhibernate是否支持指向同一个表的多个对象?什么是允许这个?
我前一段时间尝试过,我记得如果你对其中一个对象进行查询,它会加载一倍的数量,但我不确定我没有错过任何东西。
e.g。
10个数据输入对象 + 10个批次对象
所以20个对象而不是10个。
任何人都可以对此有所了解吗?
我应该澄清一下,这些对象是两个不同的对象,在我看来,它们的行为不应该是多态的。但是它们指向同一个数据库记录,更多的是记录在应用程序中具有双重目的,为了逻辑分区,它们应该保持独立。 (对一个域对象的更改不应该炸掉其他模块中的大量屏幕等。)
由于 皮特
答案 0 :(得分:1)
将多个对象映射到同一个表的简单方法是使用鉴别器列。在表中添加一个额外的列,并使其包含一个值,将其声明为“数据输入”或“批处理”类型。
您将创建两个对象 - 一个用于数据输入和批处理。我不完全确定你如何在常规的NHibernate XML映射中实现它 - 我使用Castle ActiveRecord进行注释,所以你要像这样标记你的对象:
[ActiveRecord("[Big Honking Table]",
DiscriminatorColumn = "Type",
DiscriminatorType = "String",
DiscriminatorValue = "Data Entry")]
public class Data Entry : ActiveRecordBase
{
//Your stuff here!
}
[ActiveRecord("[Big Honking Table]",
DiscriminatorColumn = "Type",
DiscriminatorType = "String",
DiscriminatorValue = "Batch Process")]
public class Batch Process : ActiveRecordBase
{
//Also your stuff!
}
以下是使用NHibernate + Castle ActiveRecord的方法:http://www.castleproject.org/activerecord/documentation/trunk/usersguide/typehierarchy.html 请注意,它们使用父对象 - 我认为这不是必要的,但我没有完全按照您描述的方式实现鉴别器列,因此它可能是。
以下是XML中的映射:https://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html
您还可以通过映射让NHibernate知道要加载/更新哪些列 - 如果您最终只创建一个大对象。
答案 1 :(得分:0)
我想你可能只是一点点过度工程:
简而言之,根据我10年的经验和对你的问题的理解有限,我建议你再考虑做你想做的事。