2010-04-01 39 views
0

我正在開發一個ASP.NET MVC,NHibernate和Fluent NHibernate的網站,並且想知道如何自定義我的地圖以使用自定義方法獲取記錄。如何映射我的類以便使用自定義方法獲取數據庫的記錄?

我的實體:

public class ImageGallery { 
    public virtual int Id { get; set; } 
    public virtual string Titulo { get; set; } 
    public virtual IList<Image> Images { get; set; } 
    public virtual bool IsActive { get; set; } 
} 
public class Image { 
    public virtual int Id { get; set; } 
    public virtual ImageGallery ImageGallery { get; set; } 
    public virtual string Low { get; set; } 
    public virtual bool IsActive { get; set; } 
} 

我流利的NHibernate的地圖:

public class ImageGalleryMap:ClassMap<ImageGallery> { 
    public ImageGalleryMap() { 
     Id(x => x.Id); 
     Map(x => x.Titulo); 
     HasMany(x => x.Images) 
      .KeyColumn("ImageGalleryID"); 
     Map(x => x.IsActive); 
    } 
} 
public class ImageMap:ClassMap<Image> { 
    public ImageMap() { 
     Id(x => x.Id); 
     References(x => x.ImageGallery); 
     Map(x => x.Low); 
     Map(x => x.IsActive); 
    } 
} 

而且,在我的ImageRepository類中的方法:

public IList<Image> ListActive() { 
     return this.Session.CreateCriteria<Image>() 
          .Add(Restrictions.Eq("IsActive", true)) 
        .List<Image>(); 
    } 

如果我創建一個對象是這樣的:

ImageGallery ig = new ImageGallery(); 

我可以用我的訪問將Image的列表:

foreach(Image img in ig.Images) { 
    ... 
} 

然而,ig.Images給我訪問所有的圖像記錄,我想訪問只是活動記錄(或其他標準),使用ListActive()存儲庫方法。

如何在我的地圖上指定此項?

非常感謝!

回答

1

一凡在映射約束將圖像限制總是活躍的:

public class ImageMap:ClassMap<Image> { 
    public ImageMap() { 
     Id(x => x.Id); 
     References(x => x.ImageGallery); 
     Map(x => x.Low); 
     Map(x => x.IsActive); 
     Where("IsActive = 1"); 
    } 
} 

如果要加載的圖片集合,但動態篩選它的活動記錄,最好的方法是創建一個擴展方法:

public static IEnumerable<Image> Active(this IEnumerable<Image> images) 
{ 
    return images.Where(x => x.IsActive); 
} 

然後你就可以訪問活動的記錄是這樣的:

foreach(Image img in ig.Images.Active()) { 
    ... 
} 

我喜歡擴展方法解決方案,因爲它可以用於任何IEnumerable<Image>,而不僅僅是ImageGallery上的集合。我肯定會使用這個解決方案,除非加載不活動的圖像是一個可衡量的性能問題。

如果你想有選擇地加載活動圖像,然後由reading this article about NHibernate Filters開始,因爲我沒有任何經驗。

+0

謝謝!這幫助了我很多。 – MCardinale 2010-04-14 20:57:27

相關問題