我有 2 个类,Member.cs
并使用此处Customer.cs
描述的每个类型的表继承映射。
这个问题提出了同样的问题,但没有答案。
客户.cs
public class Customer
{
}
会员.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;
}
}
客户地图.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");
}
}
我尝试了几个测试用例:
测试1.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 引用所有空列客户的成员。
这是预期的行为吗?
我知道如果我们想从瞬态父对象创建一个子对象,这是一个正确的行为。
但是如果我们要创建一个引用现有父对象的子对象呢?
我提供的链接没有涵盖任何持久性示例,谷歌搜索也没有。