【问题标题】:MVC4 Entity Framework - Cannot implicitly convertMVC4 实体框架 - 无法隐式转换
【发布时间】:2014-02-28 11:15:58
【问题描述】:

我使用模型中的 Entity Framework 5 创建了一个数据库。 该模型有一个名为“Person”的表和另一个名为“Administrator”的表。 'Administrator' 继承自 'Person'。

  • “Person”有一个 ID 和一个名称。
  • “管理员”有代码。

当我为“管理员”创建新控制器时使用 MVC4。当我自动创建控制器和视图时,这是错误:

错误 2 - 无法在“Model.Administrator”中隐式转换类型“Model.Person”。存在显式转换(您是否缺少演员表?)。

错误代码(星号之间):

public ActionResult Details(int id = 0)
    {
        **Administrator admin = db.Person.Single(u => u.Id == id);**
        if (admin == null)
        {
            return HttpNotFound();
        }
        return View(admin);
    }

【问题讨论】:

    标签: c# asp.net-mvc visual-studio entity-framework asp.net-mvc-4


    【解决方案1】:
    Administrator a = db.Person.OfType<Administrator>().Single(u => u.Id == id);
    

    使用OfType&lt;&gt;() 过滤器方法,它只返回可以转换为该类型的对象。或者明确地转换对象。

    Administrator a = db.Person.Single(u => u.Id == id) as Administrator;
    

    这两种解决方案都可以工作。

    【讨论】:

    • @RobertPlant,我不熟悉自动生成的文件以及您是否可以将它们配置为像这样考虑继承。
    【解决方案2】:

    即使在 MVC 5.1 中,脚手架生成也不知道如何处理继承的类型。您必须使用 OfType() 方法按对象类型进行过滤,如 bmused 所述。

    另外 - 如果没有记录,您需要使用 SingleOrDefault() 扩展方法才能返回 null。如果你只使用 Single() 并且没有记录,则会抛出异常。

    【讨论】:

      【解决方案3】:

      'Administrator' 继承自 'Person'"

      这意味着“管理员”是“人”,但“人”可能不是“管理员”

      你可以拥有

      Person p = new Administrator();
      

      但是

      Administrator a = new Person();
      

      不正确,您需要进行演员表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多