官方使用NHibernate的最简单方法;“ASP.NETMVC3GettingStarted”-辅导的 澄清更新的问题-开始

官方使用NHibernate的最简单方法;“ASP.NETMVC3GettingStarted”-辅导的 澄清更新的问题-开始,nhibernate,entity-framework,asp.net-mvc-3,postgresql,Nhibernate,Entity Framework,Asp.net Mvc 3,Postgresql,在我看来,要使ORM正常工作,我们只需两步。 首先添加简单的MovieDBContext代码,如 公共类MovieDBContext:DbContext { 公共DbSet电影{get;set;} } 。。在中的第二个,只需右键单击控制器文件夹,我们就可以自动生成一个MoviesController,它使用实体框架实现CRUD()功能,只需告诉要使用的模型即可。 现在,当使用web应用程序时,我们已经可以从数据库中进行写和读了 对于使用NHibernate而不是使用实体框架的电影模型,最简单(

在我看来,要使ORM正常工作,我们只需两步。

首先添加简单的MovieDBContext代码,如

公共类MovieDBContext:DbContext
{
公共DbSet电影{get;set;}
}
。。在中的第二个,只需右键单击控制器文件夹,我们就可以自动生成一个MoviesController,它使用实体框架实现CRUD()功能,只需告诉要使用的模型即可。
现在,当使用web应用程序时,我们已经可以从数据库中进行写和读了

对于使用NHibernate而不是使用实体框架的电影模型,最简单(或最简单)的方法是什么?
澄清最新问题-结束



原始问题(仅适用于其他背景信息):
我正在尝试创建一个使用NHibernate和Postgres的ASP.NETMVC3应用程序。 背景信息 使用Visual Web Developer Express在Windows上进行开发,生产环境应为Linux+Mono

迄今为止行之有效的步骤:

  • 使用Npgsql和Postgres作为数据库的ASP.Net动态数据实体Web应用程序。 已在Windows开发计算机上成功运行。
  • 尚未使用数据库/模型的ASP.Net MVC 3应用程序: 在Windows开发机器上成功运行,并使用Mono和Nginx部署到Linux生产环境。(仅作为我自己的概念证明,而不是作为公众使用的web应用。)
  • 一个ASP.NETMVC3应用程序,其模型使用SQLServerExpress作为数据库。 已在我的Windows开发计算机上成功运行。
问题: 到目前为止,我设法让Postgres使用“动态数据实体Web应用程序”,但使用MVC3Web应用程序时,我仍然无法确定从何处/如何开始。对于最后提到的MVC-3-Movie-Webapp,我想使用NHibernate和Npgsql(NHibernate)将数据库从sqlserverexpress切换到Postgres

当你看电影时,有一个简单的MovieDBContext代码

public class MovieDBContext : DbContext 
{
    public DbSet<Movie> Movies { get; set; } 
}
公共类MovieDBContext:DbContext
{
公共DbSet电影{get;set;}
}
在中,我们使用实体框架自动生成CRUD内容,只需告诉使用哪个模型。 (MoviesController.cs、Create.cshtml、Delete.cshtml、Details.cshtml、Edit.cshtml和Index.cshtml)

所以我已经使用实体框架和sqlserverexpress,但是如何使用NHibernate来实现相同的结果?(不必立即加入postgres,坚持使用SQL Server作为第一步是很好的)(希望具有类似的简单性,但获得结果本身就很好)
我发现了很多老东西,以及我如何手动映射东西,但是使用NHibernate for MVC 3实现这一点的最新标准方法是什么

(我发现的最接近的东西是中提到的源代码,但它是64 MB解压的,我有几个“项目没有成功加载”-错误,作者说他使用MVC 2,所以我认为作为一个完整的NHibernate noob,我有点不知所措。)

我认为展示如何做到这一点对其他人也非常有用,因为最初的教程非常容易理解,并且作为MVC 3应用程序开发的官方起点链接(“您的第一个ASP.NET MVC应用程序”)。
因此,我认为这将是一个关于如何将NHibernate与MVC 3结合使用的最新示例。

建议,不要挂断教程向您展示的所有自动内容。微软只是想表明,如果你不尝试做任何独特的事情,你可以很容易地开始工作

现在谈谈你的情况。在制作控制器时,您希望将该控制器与您在某处创建的模型类型绑定。使用nHibernate,我认为您将手动创建这些POCO,并且您正在使用多种方法之一通过nHibernate将这些POCO映射到您的数据库

您将无法使用实体框架选项,因为它们取决于框架的功能,以提供有关对象、数据库等的信息。最简单的方法是制作一个控制器,为您提供CRUD选项,或者使用一个空控制器来构建您自己的ActionResults


希望这对你的项目有所帮助,祝你好运。

事实上,这些自动化的东西在现实世界的应用程序中还不够有用。我们必须分离关注点,在UI层中使用DataContext不是一个好的实践,因为这种依赖性会导致诸如缺乏测试能力、违反最佳实践等问题。我认为你的项目需要有以下内容

  • 关注点分离(分层体系结构-UI层、服务层、域层、基础架构层)
  • 通用存储库和工作单元包装(数据库功能、ORM-EF、NHibernate等)
  • 在服务层中,处理存储库和工作单元处理,并向UI层公开数据传输对象或域对象(POCO)
  • 使用IOC注入依赖项将帮助您最小化依赖项
  • 创建单元测试和集成测试
  • 使用持续集成和源代码管理(分布式:Mercurial)
  • 有用的参考资料:

  • (夏普建筑)
  • (国际奥委会集装箱)
  • (通用存储库)

  • NuGet是您的朋友。下面是一个使用NuGet自动连接依赖项和配置的示例

    希望这有帮助

    public class MovieDBContext : DbContext 
    {
        public DbSet<Movie> Movies { get; set; } 
    }