使用NHibernate完成官方的"ASP.Net MVC 3 入门教程"的最简单方法是什么?

5

澄清更新的问题 - 开始


官方MVC 3入门教程中,我认为我们只需要执行两个步骤就可以让ORM工作。

第一步是按照第4部分的结尾所述添加简单的MovieDBContext代码..

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

..并且在第5部分开始时是第二个,在Controllers文件夹上右键单击,我们可以自动生成一个MoviesController,使用Entity Framework实现CRUD()功能,只需告诉它要使用哪个模型。
"Add Controller"-Form 现在当使用Web应用程序时,我们已经可以从数据库中读写。

相对于使用Entity Framework,使用NHibernate来处理我们的Movie-Model,最简单(或简单)的方法是什么?


澄清更新的问题 - 结束





原问题(仅供背景信息):
我正在尝试创建一个使用NHibernate和Postgres的ASP.Net MVC 3应用程序。
背景信息:
在Windows上使用Visual Web Developer Express进行开发,生产环境将是/应该是Linux+Mono。
到目前为止已经成功的步骤:
1. 使用Npgsql和Postgres作为数据库的ASP.Net Dynamic Data Entities Web应用程序。在Windows开发机上成功运行。(按照此教程) 2. 没有使用数据库/模型的ASP.Net MVC 3应用程序:在Windows开发机上成功运行,并使用Mono和Nginx部署到Linux生产环境中。(仅作为自己的概念验证,而不是公众使用的Web应用程序。)
3. 使用SQL Server Express作为数据库的模型的ASP.Net MVC 3应用程序。在我的Windows开发机上成功运行。(按照MVC 3入门教程)
问题是什么?
到目前为止,我已经成功让Postgres与“动态数据实体Web应用程序”配合使用,但在MVC 3 Web应用程序中,我不知道从哪里或如何开始。对于最后提到的MVC-3-Movie-Webapp,我想使用NHibernate和Npgsql将数据库从SQL Server Express切换到Postgres(NHibernate因为Mono不支持实体框架)。当您查看第4部分的结尾时,有简单的MovieDBContext代码。
public class MovieDBContext : DbContext 
{
    public DbSet<Movie> Movies { get; set; } 
}

在第5部分的开头,我们使用Entity Framework自动生成CRUD-stuff,只需告诉它要使用哪个模型即可。 (MoviesController.cs,Create.cshtml,Delete.cshtml,Details.cshtml,Edit.cshtml和Index.cshtml)
所以我已经用Entity Framework和SQL Server Express实现了这个功能,但是我如何使用NHibernate实现相同的结果呢?(不一定立即使用postgres,先使用SQL-Server作为第一步也可以)(希望具有类似的简单性,但获得结果本身就很好) 我发现很多旧的东西和手动映射的方式,但是使用NHibernate为MVC 3实现这一点的最新标准方法是什么?
(我找到的最接近的东西是{{link2:this thread}}中提到的源代码,但它解压后有64 MB,我得到了几个“项目加载失败”错误,并且作者说他使用的是MVC 2,所以我认为对于完全不了解NHibernate的人来说有些困难。)
我认为展示这个过程对其他人也会非常有用,因为原始教程非常易于跟随,并且作为 MVC 3 应用程序开发的官方起点,链接在 http://www.asp.net/mvc 上(“您的第一个 ASP.NET MVC 应用程序”)。 因此,我认为这将是一个关于如何在 MVC 3 中使用 NHibernate 的很好的最新示例。
3个回答

1

NuGet是你的好朋友。这里有一个很好的例子,展示了如何使用NuGet自动连接你的依赖项和配置。

希望这能帮到你。


1

实际上,这些自动化工具在现实世界的应用中并没有足够的帮助。我们必须分离关注点,并且在UI层使用DataContext不是一个好的做法,因为这种依赖会导致问题,如缺乏可测试性、违反最佳实践等。我认为您需要在项目中拥有以下内容:

  1. 关注点分离(分层架构-UI层、服务层、领域层、基础设施层)
  2. 通用存储库和工作单元封装(数据库功能、ORM-EF、NHibernate等)
  3. 在您的服务层处理存储库和工作单元处理,并向UI层公开数据传输对象或您的域对象(POCOs)
  4. 使用IOC来注入依赖项将帮助您最小化依赖项
  5. 创建单元测试和集成测试
  6. 使用持续集成和源控制首选(分布式:Mercurial)

有用的参考资料:

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

0
建议,不要被教程中展示的所有自动化内容所困扰。微软只是想表明,如果您不尝试做任何独特的事情,您可以轻松地开始使用它们。
现在针对您的情况。当您创建控制器时,您希望将该控制器与某个模型类型绑定,该模型类型在其他地方创建。我认为使用nHibernate时,您将手动创建这些POCO,并且正在使用许多方法之一将这些POCO通过nHibernate映射到数据库。
您将无法使用Entity Framework选项,因为它们依赖于框架的功能来提供有关对象、数据库等的信息。最简单的方法是创建一个控制器,该控制器为您提供CRUD选项,或者使用空控制器构建自己的ActionResults。
希望这能帮助您并祝您的项目好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接