【发布时间】:2016-12-18 11:11:38
【问题描述】:
我在测试 Fluent NHibernate 的持久性时遇到了一些问题。我不确定这是否只是我对测试的理解不善或对测试的不正确期望。如果是这样,是否有人对如何最好地为 DAL 的这一部分设置单元测试有任何建议?
我有一对具有一对多关系的类 Client 和 Facility:
一个:
Client可以有多个Facility
使用这个 FluentNHibernate 的映射结构,我希望它们应该是这样的:
public class ClientMapping : DataMapping<Client>
{
public ClientMapping()
{
HasMany(client => client.Facilities)
.Inverse()
.Cascade
.All();
}
}
public class FacilityMapping : DataMapping<Facility>
{
public FacilityMapping()
{
References(fac => fac.Owner);
}
}
我遵循了 FNH 关于创建如下测试的建议,但在运行它时 - 我得到了一个带有 2 个客户端的 Client 表和一个带有两个不同 ID 的 Facility 表,即使我传入了一个对象。
[Test]
public void CanCorrectlyCreateFacilityTable()
{
_client = new Client {Name = "Preston"};
new PersistenceSpecification<Facility>(session, new DataEqualityComparer())
.CheckProperty(f => f.Id, 1)
.CheckProperty(f => f.Name, _facility1.Name)
.CheckReference(f => f.Owner, _client)
.VerifyTheMappings();
new PersistenceSpecification<Facility>(session, new DataEqualityComparer())
.CheckProperty(f => f.Id, 2)
.CheckProperty(f => f.Name, _facility2.Name)
.CheckReference(f => f.Owner, _client)
.VerifyTheMappings();
}
我发现的最接近的 q/a 如下,但即使首先运行 Client 测试,我似乎也得到了相同的结果(可能是因为每次测试的数据库状态都会自行重置):
Cascade persist creates duplicate rows? Hibernate - one to Many relationship
【问题讨论】:
标签: c# sql nhibernate fluent-nhibernate fluent-nhibernate-mapping