NHibernate流畅的HasMany使用PersistenceSpecification进行测试

时间:2011-11-03 09:02:18

标签: c# database nhibernate testing fluent-nhibernate

我有一个定义命令的表,一个命令有一个参数列表,一个参数必须有一个命令。这意味着parameterMap中的引用:

Id(x => x.Id).Column("GUID_PARAMETER").GeneratedBy.Assigned();
References(x => x.Command).Column("GUID_COMMAND").Cascade.All();
Table("MST_PARAMETER");

和HasMany in命令填充列表:

Id(x => x.Id).Column("GUID_COMMAND").GeneratedBy.Assigned();
HasMany<ParameterEntity>(x => x.ParameterList)
  .Table("MST_PARAMETER")
  .KeyColumn("GUID_PARAMETER")
  .Inverse()
  .Cascade.All();
Table("MST_COMMAND");

然后,当试图测试一个命令有一个参数列表时,我总是得到一个错误,说我不能用null命令插入一个参数。

对于我所看到的,实现这一点的正确方法是在测试命令图时使用这样的调用

new PersistenceSpecification<CommandEntity>(_session)
.CheckProperty(c => c.Id, Guid.NewGuid())
.CheckList(c => c.ParameterList, FixtureUtils.GetDefaultParameterListFromCommand(), (command, parameter) => command.AddParameter(parameter))

可以测试吗?

1 个答案:

答案 0 :(得分:0)

您已设置inverse=true,这意味着参数负责关联。因此,您必须在参数:

上设置属性命令
.CheckList(c => c.ParameterList, FixtureUtils.GetDefaultParameterListFromCommand(), (command, parameter) => { command.AddParameter(parameter); parameter.Command = command; })

更新

根据参考声明

.KeyColumn("GUID_PARAMETER")应为.KeyColumn("GUID_COMMAND")