2010-09-01 66 views
1

我想通過ASP.NET MVC正確地配置Fluent和NHibernate。據我所知它已正確配置,但當我訪問使用此設置的頁面時,我沒有收到任何數據結果。NHibernate的查詢沒有返回任何結果

我使用的模型被稱爲Brand,數據庫表格是Brands

這裏是我的BrandController片段:

public ActionResult Index() 
{ 
    IRepository<Brand> repo = new BrandRepository(); 
    var brands = repo.GetAll().ToList<Brand>(); 

    return View(brands); 
} 

這裏是我的BrandRepository片段:

ICollection<Brand> IRepository<Brand>.GetAll() 
{ 
    using (ISession session = NHibernateHelper.OpenSession()) 
    { 
     var brands = session 
      .CreateCriteria(typeof(Brand)) 
      .List<Brand>(); 

     return brands; 
    } 
} 

這裏是我的NHibernateHelper:

public class NHibernateHelper 
{ 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
      { 
       _sessionFactory = Fluently.Configure() 
        .Database(
         MsSqlConfiguration.MsSql2008 
          .ConnectionString(c => c 
           .FromConnectionStringWithKey("ShoesFullAccess") 
          ) 
        ) 
        .BuildSessionFactory(); 
      } 

      return _sessionFactory; 
     } 
    } 

    public static ISession OpenSession() 
    { 
     return SessionFactory.OpenSession(); 
    } 
} 

這裏是我的品牌型號:

public class Brand 
{ 
    public int Id { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Style> Styles { get; private set; } 

    public Brand() 
    { 
     Styles = new List<Style>(); 
    } 

    public virtual void AddStyle(Style style) 
    { 
     Styles.Add(style); 
    } 
} 

最後,這裏是我的BrandMap:

public class BrandMap : ClassMap<Brand> 
{ 
    public BrandMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     HasMany(x => x.Styles) 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

如果任何人都可以點我在正確的方向我怎麼能縮小的問題,我會非常感謝!

+1

只是可以肯定它到底是指向哪個表指定,存在數據庫,表,數據對? – Rahul 2010-09-01 05:06:23

+0

是的。這是我檢查的第一件事 – 2010-09-01 05:13:20

回答

4

您沒有將映射添加到配置中。

.BuildSessionFactory()前補充一點:

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<BrandMap>()) 
+0

你說得對。我確實需要做這個修改!我還必須做其他幾件事。 – 2010-09-01 13:30:07

1

我需要做出一些修改我的代碼。正如迭戈指出的那樣,第一個也是主要的一點是將映射添加到配置中。

您沒有將映射添加到配置中。

.BuildSessionFactory()之前補充一點:

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<BrandMap>())

我不得不修復的下一件事是我Brand模型。我需要使Id字段virtual

最後,我需要改變我的BrandMap只是一點點 - 我不得不通過將此代碼Table("Brands");