我是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”
我错过了什么吗?如何告诉模型该列不需要值?
答案 0 :(得分:1)
神秘解决了。似乎问题是我的命名约定总是使用“ID”作为ID列的列名。
当我打电话时
路由引擎正在选择
行动=创造; ID =“”
来自MapRoute“{controller} / {action} / {id}”的
将模型中的标识列名称更改为“VacancyID”,并确保一切正常。
答案 1 :(得分:0)
您没有说出“需要值”错误的来源。客户端模型中的整数值将默认为零,因此始终会有一个值。没有看到堆栈,我的猜测是错误来自其他地方。当您看到错误时查看堆栈,并找出应用程序的哪个部分正在提升它。
答案 2 :(得分:0)
我会创建一个自定义路线,这就是它们的目的......
答案 3 :(得分:0)
如果您不想更改数据库架构,可以添加不带id参数的路由规则
routes.MapRoute(
"Create",
"{controller}/Create",
new { action = "Create" }
);