2009-07-10 10 views
5

私は、これらのクラスを持っている:データベースビューを使用して/マップして、含まれているコレクションを設定する方法は?

public class FloorFill 
{ 
    protected FloorFill(){} 
    public virtual ProductCatalog Catalog { get; set; } 
    public virtual Inventory BatchedItem { get; set; } 
    public virtual Transaction Batch { get; set; } 
    public virtual int ItemReference { get; set; } 
    public virtual IList<InventoryLocation> BackstockLocations { get; set; } 
} 
public class InventoryLocation 
{ 
    public InventoryLocation(){} 
    public virtual int Id { get; set; } 
    public virtual int ItemReference { get; private set; } 
    public virtual Location Where { get; set; } 
    public virtual int HowMany { get; set; } 
} 

私は場所や他のいくつかのフィルタリングによってItemsを集約するデータベースビューを持っています。 FloorFill.BackstockLocationsコレクションを読み込むためのマッピングでこのビューを参照したいと思います。

このコレクションに値を設定するには、どのようなアプローチをとってください。私は怠惰な負荷にコレクションをしたいと思いますが、この時点で、私はちょうどデータを取得して幸せです。ここで

は、マッピングファイルは、以下のとおりです。

public class FloorFillMap : EntityBaseMap<FloorFill> 
{   
    public FloorFillMap() 
    { 
     Map(x => x.ItemReference); 
     References(x => x.Catalog, "ProductCatalogId") 
         .WithForeignKey(); 
     References(x => x.Batch, "TransactionId") 
       .WithForeignKey() 
       .Cascade.SaveUpdate(); 
     References(x => x.BatchedItem, "InventoryId") 
       .WithForeignKey() 
       .Cascade.SaveUpdate(); 
     HasMany(x => x.BackstockLocations) 
      .KeyColumnNames.Add("ItemReference") 
      .Inverse() 
      .Cascade.None() 
      .LazyLoad(); 
    } 
} 

public class InventoryLocationMap : ClassMap<InventoryLocation> 
{ 
    public InventoryLocationMap() 
    { 
     WithTable("InventoryLocations"); 
     Id(x => x.Id); 
     References(x => x.Where, "LocationId") 
      .FetchType.Join() 
      .Cascade.None(); 
     Map(x => x.HowMany); 
     ReadOnly(); 
    } 
} 

結果のクエリがある:ビューをマッピング

SELECT 
    this_.Id as Id33_0_, 
    this_.Created as Created33_0_, 
    this_.ItemReference as ItemRefe3_33_0_, 
    this_.Modified as Modified33_0_, 
    this_.RowVersion as RowVersion33_0_, 
    this_.ProductCatalogId as ProductC6_33_0_, 
    this_.TransactionId as Transact7_33_0_, 
    this_.InventoryId as Inventor8_33_0_ 
FROM [FloorFill] this_ 

答えて

4

は、限り、あなたは更新しようとしないように、テーブルのマッピングと同じですそれ。

この声明で何をしようとしていますか?

References(x => x.Where, "LocationId") 
    .FetchType.Join().WithColumns("Id").Cascade.None(); 

"LocationId"は、キー列名ですが、WithColumnsコールは、その値を上書きします。

何か起きているか起こっていないのか他の何らかの兆候が助けになります。

+0

私はWithColumns( "Id")を削除しました。 selectステートメントは、InventoryLocations.ItemRefenceとFloorFill.Idを比較しており、FloorFill.ItemRefenceにマップする必要があります。 – Barry

+0

他のエンティティのマップから決定できるWithTableNameを持つべきではありません。あなたのInventoryLocationMapでは、あなたのIDのColumnNameをプライマリキーとして削除し、Map(x => x.ItemReference)を外す必要があります。これは、外部キーをプロパティとしてマッピングするためです。今何が起こるのですか? –

+0

あなたの提案された変更の理解を反映するためにコードリストを編集しました。これはBackstockロケーションコレクションを作成していません。 – Barry

関連する問題