最简单的方法是将NHibernate用于官方的“ASP.Net MVC 3入门”教程

时间:2011-08-03 22:41:42

标签: nhibernate entity-framework asp.net-mvc-3 postgresql

澄清更新的问题 - 开始


official MVC 3 Getting Started-tutorial中我觉得我们要做的就是让ORM正常工作是两步。

首先添加简单的MovieDBContext代码,如end of part 4所述..

public class MovieDBContext : DbContext 
{
    public DbSet<Movie> Movies { get; set; } 
}
beginning of part 5中的

..和 second ,只需右键单击Controllers文件夹,我们就可以自动生成实现CRUD()的MoviesController - 使用Entity Framework的功能只是告诉使用哪种型号 "Add Controller"-Form 现在,在使用Web应用程序时,我们已经可以从数据库中进行编写和读取。

使用NHibernate而不是使用Entity Framework为我们的Movie-Model完成这个最简单(或简单)的方法是什么?


澄清更新的问题 - 结束





原始问题(仅限其他背景信息):


我正在尝试创建一个使用NHibernate和Postgres的ASP.Net MVC 3应用程序。

背景资料

使用Visual Web Developer Express在Windows上完成开发,生产环境将是/应该是Linux + Mono。

到目前为止已经奏效的步骤:

  • 使用Npgsql和Postgres作为数据库的ASP.Net动态数据实体Web应用程序。 在Windows开发机器上成功运行。 (Following this tutorial)
  • 尚未使用数据库/模型的ASP.Net MVC 3应用程序: 在Windows开发机器上成功运行,并使用Mono和Nginx部署到Linux生产环境。 (仅作为我自己的概念证明,而不是公众使用的网络应用程序。)
  • 使用SQL Server Express作为数据库的模型的ASP.Net MVC 3应用程序。 在我的Windows开发机器上成功运行。 (Following the MVC 3 Getting Started-tutorial)

问题

到目前为止,我设法让Postgres使用“动态数据实体Web应用程序”,但是使用MVC 3 Web应用程序我仍然坚持在哪里/如何开始。对于最后提到的MVC-3-Movie-Webapp,我想使用NHibernate和Npgsql(自Mono doesn't support Entity Framework以来的NHibernate)将数据库从SQL Server Express切换到Postgres。

当您查看end of part 4时,会有简单的MovieDBContext代码

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

beginning of part 5中,我们使用Entity Framework自动生成CRUD-stuff,只需告诉使用哪个Model。 (MoviesController.cs,Create.cshtml,Delete.cshtml,Details.cshtml,Edit.cshtml和Index.cshtml)

所以我使用Entity Framework和SQL Server Express,但是如何通过使用NHibernate实现相同的结果? (不一定要立即使用postgres,坚持使用SQL-Server作为第一步就可以了)(希望有类似的简单,但获得结果本身会很棒)
我发现了很多旧的东西以及我将如何手动映射事物,但是使用NHibernate for MVC 3实现这一目标的最新标准方法是什么?

(我发现的最接近的是this thread中提到的源代码,但它是64 MB解压缩我有几个“项目没有成功加载” - 错误并且作者说他使用MVC 2所以我认为它是一个作为一个完整的NHibernate菜鸟,我的头脑很少。)

我认为展示如何做到这一点对其他人来说也非常有用,因为原始教程非常容易理解,并且作为http://www.asp.net/mvc上的MVC 3应用程序开发的官方起点链接(“你的第一个ASP.NET MVC应用程序“)。 所以我认为这将是一个关于如何将NHibernate与MVC 3一起使用的最新例子。

3 个答案:

答案 0 :(得分:1)

实际上,那些自动化的东西在现实世界的应用程序中没有足够的帮助。我们必须分开关注点并在UI层中使用DataContext不是一个好习惯,因为这种依赖性会导致缺乏测试能力,违反最佳实践等问题。我认为您需要对项目进行以下操作

  1. 关注点分离(分层架构 - UI层,服务层,域层,基础架构层)
  2. 通用存储库和工作单元包装(数据库功能,ORM - EF,NHibernate等
  3. 在服务层流程存储库和工作单元处理中,将数据传输对象或域对象(PO​​CO)公开给UI层
  4. 使用IOC注入依赖项将帮助您最小化依赖性
  5. 创建单元测试和集成测试
  6. 使用持续集成和源代码控制首选(分布式:Mercurial)
  7. 有用的参考资料:

    1. (夏普建筑)http://sharparchitecture.codeplex.com/
    2. (IOC容器)http://www.castleproject.org/container/
    3. (通用存储库)http://code.google.com/p/genericrepository/

答案 1 :(得分:1)

NuGet是你的朋友。这是good example使用NuGet自动连接您的依赖关系和配置。

希望这有帮助。

答案 2 :(得分:0)

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

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

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

希望这对你的项目有所帮助。