,我得到了以下錯誤消息:功能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