实体框架标识列无效

时间:2009-05-01 11:20:17

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

我是Entity Framework的新手,我正在构建我的第一个MVC应用程序。我正在为一个简单的实体实现一个Create View,但是我遇到了(SQL Express 2005)Identity列主键的问题。据我所知,Framework应该处理Identity列,让SQL数据库生成ID值。

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

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

Property Name =“ID”Type =“int”Nullable =“false”StoreGeneratedPattern =“Identity”

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

4 个答案:

答案 0 :(得分:1)

神秘解决了。似乎问题是我的命名约定总是使用“ID”作为ID列的列名。

当我打电话时

http://.../Vacancy/Create

路由引擎正在选择

行动=创造; ID =“”

来自MapRoute“{controller} / {action} / {id}”

将模型中的标识列名称更改为“VacancyID”,并确保一切正常。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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