加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Fluent NHibernate PersistenceSpecification CheckList

发布时间:2020-12-16 01:33:28 所属栏目:百科 来源:网络整理
导读:我目前正在开展一个大学项目,我们正在使用Fluent NHibernate.我正在研究如何为我们的实体和Fluent映射创建测试. 然而,在试图弄清楚如何使用PersistenceSpecification的CheckList时,我已经走到了尽头. 单元测试失败,出现以下错误: MvcShop.Core.Tests.Entiti
我目前正在开展一个大学项目,我们正在使用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文档: http://wiki.fluentnhibernate.org/Persistence_specification_testing – 请参见该页面的最后一行.)

尝试:

[TestMethod]
public void CanMapItem()
{
    var p1 = new ItemPicture { Filename = "test.jpg",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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读