加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何使用ASP.NET MVC 2在NHibernate上实现

发布时间:2020-12-16 06:26:44 所属栏目:asp.Net 来源:网络整理
导读:在过去的几天里,我一直在研究MVC应用程序.在这里,我使用几个下拉列表,并希望如果我所做的是一个很好的做法.我有大约5-6个下拉列表从数据库中提取.下拉列表中有ID和说明字段.我能够通过问题填写下拉菜单.但是,当我列出主表时,我遇到了性能问题. 所有下拉选项
在过去的几天里,我一直在研究MVC应用程序.在这里,我使用几个下拉列表,并希望如果我所做的是一个很好的做法.我有大约5-6个下拉列表从数据库中提取.下拉列表中有ID和说明字段.我能够通过问题填写下拉菜单.但是,当我列出主表时,我遇到了性能问题.

所有下拉选项都作为整数存储在数据库中,因此我也将该字段与BaseModel(映射到HBM的类)一样.当我列出数据库中的所有记录时,可以预见我在记录中得到一个整数.到目前为止,我在性能方面没有任何问题.

我想显示所选项目的描述,因此我为下拉列表创建了一个模型类,并在模型中有一个方法,该方法将与数据库通信并根据选择获取描述.问题是这会减慢页面加载速度.我想知道我是否需要进行设计更改才能更快地加载.以下是我的代码

MasterList1表(状态和县是此表中的整数)
状态下拉列表(具有ID的所有状态的主表)
郡下拉(主表有所有县ID)

Nhibernate的BaseModel类

MasterList1

模型类

MasterList1Model
StateModel
CountyModel

存储库类
MasterList1Repo
StateRepo
CountyRepo

视图
MasterList1

在视图中,我在BaseModel类中调用字符串proprty.在属性中,我正在调用Model类,而Model类又调用Repo来获取字符串.这是Repo类中的方法.

public ApplicationTypeMaster GetByID(int ID)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            return session.Get<ApplicationTypeMaster>(ID);
        } 
    }

    public string GetApplicationTypeByID(int ID)
    {
        return GetByID(ID).ApplicationTypeDescription.ToString();
    }

我不知道如何改善这一点.有什么建议 ?

解决方法

你知道 ViewModel approuch吗?它是一个表示View需要显示的类.您可以创建一个ViewModel类,其中包含您需要的这些类型,并使用此类键入您的视图,使用NHibernate填充它然后显示它,示例:

public class ApplicationTypeMasterViewModel
{
   public int Id { get; set; }
   public string Name { get; set; }
   public string CityName { get; set; }
   public string StateName { get; set; }

   // other properties you need

   public ApplicationTypeMasterViewModel() { }   
}

在您的服务层,尝试这样的事情:

public ApplicationTypeMasterViewModel GetByID(int ID)
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            return session.Query<ApplicationTypeMaster>()
                            .Fetch(x => x.City).ThenFetch(c => c.State)
                            .Where(x => x.Id == ID)
                            .Select(x => new ApplicationTypeMasterViewModel() { 
                                                    Id = x.Id,Name = x.Name,CityName = x.City.Name,StateName = x.City.State.Name
                                                    // other properties you need
                                            })
                            .FirstOrDefault();
        } 
    }

您可以使用Lists或Single对象来完成.

在控制器中,您可以调用此方法并将ViewModel传递给View并呈现它:

<p>
    <label>Name: </labe>
    <%: Model.Name %>
</p>

<p>
    <label>City: </labe>
    <%: Model.CityName %>
</p>


<p>
    <label>State: </labe>
    <%: Model.StateName %>
</p>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读