Asp.net-Mvc

用於 Sql 視圖的 Fluent Nhibernate 映射

  • January 27, 2015

我在帶有 c# 的 asp.net mvc3 中使用 Fluent Nhibernate

我正在按照以下方式生成和映射一個類

映射

using FluentNHibernate.Mapping;
using Com.Web.Domain;

  namespace Com.Web.Mapping
     {
        public class CompanyMap : ClassMap<Company>
       {
            public CompanyMap()
           {
              Id(x => x.id);
              Map(x => x.Name);
             }
         }
      }

班級

    using System.Collections.Generic;
    using System;

     namespace Com.Web.Domain
     {

         public class Company
        {

         public virtual int id { get; set; }
         public virtual string Name{get;set}

          }

       }

並在配置文件中

 private static void InitializeSessionFactory()
   {

      _sessionFactory = Fluently.Configure()
           .Database(MsSqlConfiguration.MsSql2008
                         .ConnectionString(local)

           )
           .Mappings(m =>
                     m.FluentMappings
                         .AddFromAssemblyOf<Company>())
           .ExposeConfiguration(cfg => new SchemaExport(cfg)
           .Create(false, false))  // this is intentionally set false , bcz i dont want to regenerate table when application starts every time 
           .BuildSessionFactory();


   }

現在問題來了,我在 sql 中創建一個視圖,看起來像這樣

Sql 視圖

CREATE VIEW [FeaturedCompanies] AS

  SELECT COUNT(Company.id) As Count FROM Company
  WHERE Name='Alias'

我想在我的程式碼中使用這個視圖,就像我正在使用的一樣,但我該怎麼做,我搜尋了很多,但在Google上什麼也沒找到

請幫助我並提前感謝

到目前為止嘗試了什麼

班級

public class FeaturedCompany
{
   public virtual int id { get; set; }
   public virtual int name { get; set; }
   public virtual int count { get; set; }
}

映射

public class FeaturedCompanyMap : ClassMap<FeaturedCompany>
 {
public FeaturedCompanyMap()
{
   Table("FeaturedCompanies");
   ReadOnly();
  Id(x => x.id);
  Map(x => x.name);
  Map(x => x.count);
}
}

視圖的映射方式與表的映射方式相同,只是您應該放入Readonly()映射以防止意外寫入。例子:

public class FeaturedCompanyMap : ClassMap<FeaturedCompany>
{
   public FeaturedCompanyMap ()
   {
      Table("FeaturedCompanies");
      ReadOnly();

      Id(x => x.Id);
      Map(x => x.Name);
      Map(x => x.Count);
   }
}

更新:獲取計數

var results = session.Query<FeaturedCompany>().Where(filter).List();

foreach(var row in results.Select(r => "Alias: " + r.Name + "  Occurence: " + r.Count))
{
   // print row to screen
}

引用自:https://stackoverflow.com/questions/12742651