【发布时间】:2009-11-20 21:55:07
【问题描述】:
我收到以下错误消息:
System.IndexOutOfRangeException:此 SqlParameterCollection 的索引 9 无效,Count=9..
我非常想知道为什么 oO?!
数据库架构和 hbm.xml 文件都是使用 FluentNHibernate 正确创建的。 CanCorrectlyMapBook方法出现错误,PersistenceSpecificationTest运行无错误。
[TestClass]
public class PersistenceSpecificationTests
{
private static ISession _session;
[TestInitialize]
public void PersistenceSpecificationTest()
{
_session = Helper.CreateSessionFactory(false, false).OpenSession();
}
[TestMethod]
public void CanCorrectlyMapBook()
{
new PersistenceSpecification<Book>(_session)
.CheckProperty(p => p.IncludesCDDVD, true)
.CheckProperty(p => p.Isbn, "1232324983sfdsdkfj")
.CheckProperty(p => p.Name, "My Book")
.VerifyTheMappings();
}
}
数字 9 可能来自这本书的列数。起初我以为我必须检查所有属性,但我在另一个项目中用另一个实体对此进行了测试,它工作正常。
有人有想法吗?
编辑:
这里是我的域对象 + 映射:
public interface IEntity
{
int Id { get; set; }
}
public abstract class LoanedItem : IEntity
{
public virtual int Id { get; set; }
public virtual DateTime DateOfIssue { get; set; }
public virtual bool IsLoaned { get; set; }
public virtual String Name { get; set; }
public virtual Employee LoanedBy { get; set; }
public virtual Release Release { get; set; }
public virtual Publisher Publisher { get; set; }
public virtual bool IncludesCDDVD { get; set; }
}
public class Book : LoanedItem
{
public virtual string Isbn { get; set; }
public virtual int Author { get; set; }
}
public class BookMap : ClassMap<Book>
{
public BookMap()
{
// identity mapping
Id(p => p.Id).Column("BookID");
// column mapping
Map(p => p.Author);
Map(p => p.Isbn);
Map(p => p.IncludesCDDVD);
Map(p => p.IsLoaned);
Map(p => p.Name);
// component mapping
// Publisher
Component(p => p.Publisher, m =>
{
m.Map(x => x.Name);
m.Map(x => x.Homepage);
});
// Release
Component(p => p.Release, m =>
{
m.Map(x => x.ReleaseDate);
m.Map(x => x.ReleaseNumber);
});
// reference/association
References(p => p.LoanedBy).Column("EmployeeID");
}
编辑:
好的,上面的问题可以解决了。
但是如何检查组件?当我使用 CheckProperty 检查组件时,会发生错误...“预期为 'DomainModel.Model.Book' 但得到 'DomainModel.Model.Book' ... 呃 :) 那里有什么问题?它是完全相同的域对象。我创建了一个新的question
【问题讨论】:
-
是的,请提供您的图书映射和图书实体。另一方面,这就是我不使用 PersistenceSpecification 的原因。当出现问题时,您不能“破坏”它打开并调试它。我更喜欢编写一个保存和加载类,使用 NBuilder 生成一个实体,然后保存/加载它以确认它是持久的。通过这种方式,您可以设置断点并检查局部变量以查看它们在任何给定点的值。
标签: unit-testing fluent-nhibernate