asp.net-mvc - MVC3继承问题

标签 asp.net-mvc asp.net-mvc-3 visual-studio-2010 entity-framework entity-framework-4

我有一个包含以下表格的数据库

  • 业务(包含所有常见字段)
  • Business_Hotel(包含特定于酒店的字段)
  • Business_Restaraunt(包含特定于 Restaraunt 的字段)
  • Business_Airport(包含特定于机场的字段)

我使用继承在 EF 中对这些进行建模。

  • 企业(基地)
  • 酒店(从企业继承)
  • 餐馆(企业继承)
  • 机场(从企业继承)

我使用基本实体(企业)通过 VS2010 中的 Controller 创建向导创建了 Controller

我想对所有三种类型重复使用相同的创建操作。

 [HttpPost]
 public ActionResult CreateHotel(Business business)
    {


        if (ModelState.IsValid)
        {


            db.Businesses.AddObject(business);        
            db.SaveChanges();
            return RedirectToAction("Index");
        }

如果我修改如下所示的函数,它会正确创建酒店类型的业务

 public ActionResult CreateHotel(Hotels business)

所以问题是我如何动态地做到这一点。有更好的方法吗?

最佳答案

作为建议,最好不要尝试重用单个Action(即使 DRY 原则看起来很有吸引力)

即使你能找到一种方法来做到这一点,将来这也很难维持。

您想要做的是:

将商务酒店视为商务餐厅,并将其中任何一个视为商务机场。你看出什么问题了吗?酒店应该有自己的业务规则,机场和餐厅也是如此

如果您将来尝试为每个方法添加一些特定的逻辑,您的操作方法将会增加复杂性(顺便说一句,操作方法应该只调用模型以保持它们的干净)。

蓝皮书 (DDD)对此进行了更好的描述

所以我的建议是不要重用这种逻辑(域逻辑),我个人尝试仅重用基础设施逻辑

关于asp.net-mvc - MVC3继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10865558/

相关文章:

visual-studio - 在 Visual Studio 中跨项目添加和删除多个引用

jquery - 如何使用 JQuery 将文件上传到 MVC VNext 网络服务器?

c# - 在 ASP.Net MVC 中使用 AutoMapper 的正确方法

asp.net - 将 Visual Studio 本地 IIS 7 调试虚拟路径设置为/

c# 对象引用未设置为对象的实例

.net - "Could not load file or assembly..."DotNetOpenAuth + MVC3

c++ - 降低 C++ 中的模板复杂性

c# - 将数据库上传到 ASP.NET MVC 应用程序的服务器?

css - 根据条件在 Table <tr> 之间添加空格

asp.net-mvc - 如何修复编译器错误消息 : CS1061 in Asp.net MVC?