【问题标题】:Entity Framework Identity column not working实体框架身份列不起作用
【发布时间】:2010-10-23 02:24:16
【问题描述】:

我对 Entity Framework 还很陌生,并且正在构建我的第一个 MVC 应用程序。我正在为一个简单的实体实现一个创建视图,但是,我遇到了(SQL Express 2005)标识列主键的问题。据我了解,框架应该处理 Identity 列并让 SQL 数据库生成 ID 值。

当我尝试使用创建视图保存而不设置 ID 值时,我收到“需要值”错误。如果我为 ID 指定任何值,它会使用数据库中的 Identity 值保存回数据库 - 即。而不是我指定的值,所以一旦 T-SQL 到达那么远,显然是正确生成的。

Identity 属性设置在数据库中的 ID 列上,StoreGeneratedPattern 在模型中设置为“Identity”(见下文):-

属性名称="ID" Type="int" Nullable="false" StoreGeneratedPattern="Identity"

我错过了什么吗?如何告诉模型此列不需要值?

【问题讨论】:

    标签: asp.net entity-framework identity-column


    【解决方案1】:

    谜团解开了。看来问题是我的命名约定始终使用“ID”作为 ID 列的列名的结果。

    当我打电话时

    http://.../Vacancy/Create

    路由引擎将其作为

    行动 = 创建; ID = ""

    来自 MapRoute "{controller}/{action}/{id}"

    在模型中将标识列名称更改为“VacancyID”,瞧,一切正常。

    【讨论】:

      【解决方案2】:

      您没有说“需要值”错误的来源。客户端模型中的整数值将默认为零,因此总会有一个值。没有看到堆栈,我的猜测是错误来自其他地方。看到错误时查看堆栈,并找出应用程序的哪个部分引发了错误。

      【讨论】:

      • 你是对的。它与数据库无关。 UpdateModel(entity) 在收到 FormCollection 时失败。通过实体时以另一种方式尝试 ModelState.IsValid = false 。正在为 ID 字段返回“需要值”验证。
      【解决方案3】:

      我会创建一个自定义路线,这就是它们的用途......

      【讨论】:

        【解决方案4】:

        如果您不想更改数据库架构,可以添加不带 id 参数的路由规则

        routes.MapRoute(
           "Create",
           "{controller}/Create",
            new { action = "Create" }
        );
        

        【讨论】:

          猜你喜欢
          • 2013-12-26
          • 1970-01-01
          • 2017-08-30
          • 2011-04-28
          • 2017-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多