1

私は次のものを持っています...

public class TempCartMap : ClassMap<TempCart>
{
   Id(x => x.Id).GeneratedBy.Identity();
   ...
   HasMany(x => x.Products)
    .Inverse().Cascade.AllDeleteOrphan()
        .Table("tblCartProducts")
            .Element("ProductId").KeyColumn("CartId").AsBag();
}

[Serializable]
public class TempCart {

  public TempCart(){
    Products = new List<int>();
  }

  public virtual IList<int> Products { get; set; }

}

そして持続仕様:

    [Test]
    public void CanMapSaleCart()
    {
        SystemTime.Freeze();

        IList<int> list = new List<int> {1, 2, 3};

        new PersistenceSpecification<SaleCart>(Session)
                        //Other PropertyChecks that work fine without the Next check
                        .CheckList(x => x.AdditionalProducts, list)
                        .VerifyTheMappings();
            }

CheckListCheckPropertyに変更すると、

System.ApplicationException : プロパティ 'Products' には 'System.Collections.Generic.List 1[System.Int32]' of type 'System.Collections.Generic.List1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' が必要ですが、タイプ '' の '' を取得しましたSystem.Collections.Generic.IList`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'

そのままにしておくと、CheckListが表示されます

NHibernate.MappingException : System.Int32 の永続化機能がありません

私を狂わせる!


- - 追加

.Inverse().Cascade.AllDeleteOrphan() を削除して新しいテストを作成すると (永続化仕様を使用しない)

[Test]
public void CanMapSaleCartWithAdditionalProducts()
{
    SaleCart sCart = FactoryGirl.Build<SaleCart>();
    sCart.AdditionalProducts = new List<int> { 1, 2, 3 };

    Session.Save(sCart);
    FlushAndClear();
}

期待どおりに保存され、販売カートを作成してから、製品を他のテーブルに追加します。

TLDR : この問題は、int で永続化仕様テストを使用しようとしていることが原因のようですが、永続化仕様テストは実際には名前 (str) によるエンティティのみを受け入れます。誰かがそれを拡張したい場合は、お気軽に。

4

1 に答える 1

2

この問題は、永続性仕様テストが実際には名前 (str) によるエンティティのみを受け入れる一方で、int で永続性仕様テストを使用しようとしていることが原因のようです。誰かがそれを拡張したい場合は、お気軽に。

于 2012-07-10T08:28:26.323 に答える