gpt4 book ai didi

c# - Fluent NHibernate PersistenceSpecification CheckList

转载 作者:行者123 更新时间:2023-11-30 14:19:58 24 4
gpt4 key购买 nike

我目前正在从事一个大学项目,我们在其中使用 Fluent NHibernate。我正在研究如何为我们的实体和 Fluent 映射创建测试。

但是,我在尝试弄清楚如何使用 PersistenceSpecification CheckList 时遇到了死胡同。

单元测试失败,出现以下错误:

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");
}

我真的不知道在使用 PersistenceSpecification 类时如何填充 ItemPicture 的 Item 属性。

有什么想法吗?

最好的问候,丹麦肯尼​​斯

最佳答案

我认为 ItemPicture 在对它运行测试之前必须存在于数据库中(根据 Fluent 文档:https://github.com/FluentNHibernate/fluent-nhibernate/wiki/persistence-specification-testing - 请参阅该页面的最后一行。)

尝试:

[TestMethod]
public void CanMapItem()
{
var p1 = new ItemPicture { Filename = "test.jpg", Title = "Test title", PrimaryPicture = true};
var p2 = new ItemPicture { Filename = "test2.jpg", Title = "Test title 2" };
using (var tx = Session.BeginTransaction())
{
Session.Save(p1);
Session.Save(p2);
};
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, new List<ItemPicture> {p1, p2});
.VerifyTheMappings();
}

关于c# - Fluent NHibernate PersistenceSpecification CheckList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1816531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com