【发布时间】:2013-10-15 17:46:04
【问题描述】:
我有 2 个类,Member.cs 和 Customer.cs,并使用 here 中描述的 table-per-type 继承映射。
这个question 提出了同样的问题,但没有答案。
Customer.cs
public class Customer
{
}
Member.cs
public class Member : Customer
{
public Member(Customer customer)
{
CreateFromCustomer(customer);
}
private void CreateFromCustomer(Customer customer)
{
// Here I assume I'll assign the Id so NHibernate wouldn't have to create a new Customer and know what Customer to be referred
Id = customer.Id;
}
}
CustomerMap.cs
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap()
{
Id(x => x.Id)
.GeneratedBy.GuidComb();
}
}
MemberMap.cs
public class MemberMap : SubclassMap<Member>
{
public MemberMap()
{
KeyColumn("Id");
}
}
我尝试了几个测试用例:
Test1.cs
[Test]
public void CanAddCustomer()
{
var customerRepo = /* blablabla */;
using (var tx = NHibernateSessionManager.GetSession().BeginTransaction())
{
var customer = new Customer()
customerRepo.RegisterCustomer(customer);
tx.Commit();
}
using (var tx = NHibernateSessionManager.GetSession().BeginTransaction())
{
/* Get the persisted customer */
var customer = customerRepo.GetCustomerByWhatever();
var member = customerRepo.RegisterMember(new Member(customer));
tx.Commit();
}
}
我希望有:
1 名客户和 1 名成员,该成员是该客户的孩子
相反,我有:
2 个客户(1 个是正确创建的,1 个包含所有空列)和 1 个 Id 引用所有空列客户的成员。
这是预期的行为吗?
我知道如果我们想从瞬态父对象创建子对象,这是正确的行为。
但是如果我们要创建一个引用现有父对象的子对象呢?
我提供的链接没有涵盖任何持久性示例,谷歌搜索也没有。
【问题讨论】:
标签: nhibernate inheritance fluent-nhibernate persistence fluent-nhibernate-mapping