В настоящее время я работаю над проектом колледжа, в котором мы используем Fluent NHibernate. Я работаю над выяснением того, как создать тестирование для наших сущностей и сопоставлений Fluent.
Однако я зашел в тупик, пытаясь понять, как использовать CheckList of PersistenceSpecification.
Проведено модульное тестирование со следующей ошибкой:
MvcShop.Core.Tests.EntitiesTests.ItemTest.CanMapItem threw exception: NHibernate.PropertyValueException: not-null property references a null or transient valueMvcShop.Core.Entities.ItemPicture.Item.
Тест определяется как:
private IList<ItemPicture> _itemPictures = new List<ItemPicture>()
{
new ItemPicture { Filename = "test.jpg", Title = "Test title", PrimaryPicture = true},
new ItemPicture { Filename = "test2.jpg", Title = "Test title 2" }
};
[TestMethod]
public void CanMapItem()
{
new PersistenceSpecification<Item>(Session)
.CheckProperty(i => i.Title, "Test item")
.CheckProperty(i => i.Description, "Test description")
.CheckProperty(i => i.SalesPrice, (decimal)0.0)
.CheckList(i => i.ItemPictures, _itemPictures) // Complains that Item on ItemPicture is null.
.VerifyTheMappings();
}
Мои отображения определены как:
public ItemMap()
{
Table("Item");
Id(i => i.ItemID).GeneratedBy.Identity().Column("Item_id");
Map(i => i.ItemNo).Nullable().Length(30);
Map(i => i.Title).Not.Nullable().Length(250);
Map(i => i.Description).Nullable();
Map(i => i.SalesPrice).Not.Nullable().Precision(18);
Map(i => i.AverageRating).Precision(18).Nullable();
Map(i => i.Visible).Not.Nullable();
Map(i => i.Weight).Not.Nullable().Precision(18);
Map(i => i.TimesPurchased);
Map(i => i.InStock).Not.Nullable();
Map(i => i.DateAdded).Not.Nullable();
HasManyToMany(i => i.ItemCategories).Cascade.All().Inverse().Table("ItemCategoryItem");
HasMany(i => i.ItemPictures).Cascade.AllDeleteOrphan().Inverse().LazyLoad();
HasMany(i => i.Comments).Cascade.AllDeleteOrphan().Inverse().LazyLoad();
HasMany(i => i.Ratings).Inverse().LazyLoad();
}
public ItemPictureMap()
{
Table("ItemPicture");
Id(i => i.ItemPictureID).GeneratedBy.Identity().Column("ItemPicture_id");
Map(i => i.Title).Nullable();
Map(i => i.Filename).Not.Nullable();
Map(i => i.PrimaryPicture).Not.Nullable();
References(i => i.Item).Not.Nullable().Column("Item_id");
}
Я действительно не могу понять, как мне заполнить свойство Item ItemPicture при использовании класса PersistenceSpecification.
Есть идеи?
С наилучшими пожеланиями,
Кеннет, Дания