【发布时间】:2013-09-26 02:19:24
【问题描述】:
我刚刚在我的 ASP.NET MVC 4 应用程序中遇到了一个奇怪的问题。我创建了一个实体框架模型,其中包括对象A:
属性PK 是一个int,而ID 是一个GUID。
然后我尝试将ID 添加到A 的编辑页面作为可编辑字段。当使用@Html.EditorFor() 或@Html.TextBoxFor() 时,结果文本框中的值是PK 属性的值,而不是ID。使用 @Html.DisplayFor() 可以正确地将 ID 显示为 GUID。
代码:
<div class="editor-label">
@Html.LabelFor(model => model.ID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ID)
@Html.ValidationMessageFor(model => model.ID)
</div>
<div>
@Html.TextBoxFor(model => model.ID)
</div>
<div>
@Html.DisplayFor(model => model.ID)
</div>
结果:
玩了一会儿之后,我决定简单地更改ID 属性的名称。编辑字段立即开始显示正确的 GUID 值。
是什么导致了这种行为? ID 是实体框架中主键的保留属性名称,还是与某些 MVC 命名约定冲突(xxxController 的样式) ?
【问题讨论】:
-
默认实体将假定 ID 是您的 PK。您可以使用 Fluent API 更改此设置。这就是更改名称起作用的原因。
-
@Dunbar:请添加您的评论作为答案。 OP 不会变得更好。
-
@ChrisPratt 会的,谢谢克里斯
标签: asp.net-mvc entity-framework