,我得到了以下错误消息:功能NHibernate PersistenceSpecification
System.IndexOutOfRangeException:无效指数9这SqlParameterCollection以计数= 9 ..
而且我绝对不知道为什么OO?
数据库模式和hbm.xml文件都是用FluentNHibernate正确创建的。 在CanCorrectlyMapBookmethod错误ocurrs的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
您可以发布图书映射? – maciejkow 2009-11-20 21:59:41
是的,请提供您的图书映射和图书实体。另一方面,这就是为什么我不使用PersistenceSpecification。出现问题时,您不能“打破”打开并调试它。我更喜欢编写一个保存和加载类,使用NBuilder生成一个实体,并保存/加载它以确认它已被保存。通过这种方式,您可以设置断点并检查局部变量,以查看它们在任何给定点上的值。 – 2009-11-20 22:17:56