【问题标题】:Simplest way to use NHibernate for the official "ASP.Net MVC 3 Getting Started"-Tutorial官方《ASP.Net MVC 3 Getting Started》-教程使用NHibernate最简单的方法
【发布时间】:2011-10-19 12:51:20
【问题描述】:

澄清更新问题 - 开始


official MVC 3 Getting Started-tutorial 中,在我看来,要让 ORM 正常工作,我们要做的只是两个步骤。

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

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

.. 和 secondbeginning of part 5 中,只需右键单击 Controllers 文件夹,我们可以通过简单地告诉使用哪个型号。
现在,当使用 web 应用程序时,我们已经可以从数据库中读写了。

使用 NHibernate 而不是使用实体框架为我们的 Movie-Model 完成这项工作的最简单(或简单)方法是什么?


澄清更新问题 - 结束





原始问题(仅用于附加背景信息):


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

背景资料

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

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

  • 使用 Npgsql 和 Postgres 作为数据库的 ASP.Net 动态数据实体 Web 应用程序。 在Windows开发机上成功运行。 (Following this tutorial)
  • 尚未使用数据库/模型的 ASP.Net MVC 3 应用程序: 在 Windows 开发机上成功运行,并使用 Mono 和 Nginx 部署到 Linux 生产环境。 (仅作为我自己的概念证明,而不是作为公众使用的网络应用程序。)
  • 一个 ASP.Net MVC 3 应用程序,其模型使用 SQL Server Express 作为数据库。 在我的 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 中,我们通过简单地告诉要使用哪个模型来使用实体框架自动生成 CRUD-stuff。 (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 一起使用的最新示例。

【问题讨论】:

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


    【解决方案1】:

    NuGet 是您的朋友。这是good example 使用 NuGet 自动连接您的依赖项和配置几乎自动。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      有用的参考资料:

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

      【讨论】:

        【解决方案3】:

        建议,不要沉迷于教程向您展示的所有自动内容。 Microsoft 只是想表明,如果您不尝试做任何独特的事情,您可以轻松上手。

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

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

        希望这对您的项目有所帮助并祝您好运。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-26
          • 2012-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2018-11-29
          • 2014-11-15
          相关资源
          最近更新 更多