2011-11-10 95 views
0

我想通過PersistenceSpecification中的CheckList方法來測試一個私人列表。 但我不太滿意。任何人都可以幫忙嗎?PersistenceSpecification CheckList與私有財產

實體:

public class Item: Entity<int> 
{ 
    //values in list are used in later (internal) calculations 
    private readonly IList<PurchaseInfo> _purchaseInfo = new List<PurchaseInfo>(); 
    public virtual string SupplierCode {get; set;} 
} 

地圖:

public class ItemMap: ClassMap<Item> 
    { 
     public ItemMap() 
     { 
      Table("ITEM"); 

      Id(u => u.Id).Column("ITEMNR").GeneratedBy.Assigned(); 
      Map(u => I.SupplierCode).Column("SUPPLIERNR"); 
      HasMany<PurchaseInfo>(Reveal.Member<Item>("_purchaseInfo")) 
       .KeyColumns.Add("ITEMNR") 
       .KeyColumns.Add("SUPPLIERNR").PropertyRef("SupplierCode"); 
     } 
    } 

測試(這是我正在努力做到這一點目前)

[Test] 
    public void CanMapItem() 
    { 
     new PersistenceSpecification<Item>(Session) 
      .CheckProperty(a => a.Id, 1234) 
      .CheckProperty(a => a.SupplierCode, "S01") 
      .CheckList<Item, PurchaseInfo>(Reveal.Member<Item>("_purchaseInfo"), new List<PurchaseInfo> 
                    { 
                     new PurchaseInfo() 
                      { 
                       ItemNr = 1234, 
                       SupplierCode = "S01" 
                      }, 
                     new PurchaseInfo() 
                      { 
                       ItemNr = 1234, 
                       SupplierCode = "S02" 
                      } 
                    }) 
      .VerifyTheMappings(); 
    } 

編譯器會抱怨該清單作爲預期第一個參數

System.Linq.Expressions.Expression<System.Func<Item, System.Collections.Generic.IEnumerable<PurchaseInfo>> 

而Reveal.Member返回

System.Linq.Expressions.Expression<System.Func<Item, object>> 

回答

1

Reveal.Member有2個重載,一個共同的和一個特殊的。使用特殊的:

.CheckList<Item, PurchaseInfo>(Reveal.Member<Item, IEnumerable<PurchaseInfo>>("_purchaseInfo"),