【问题标题】:Why does this EF property return another property's value?为什么这个 EF 属性返回另一个属性的值?
【发布时间】: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


【解决方案1】:

默认情况下,实体将假定 ID 是您的 PK。您可以使用 Fluent API 更改此设置。这就是更改名称起作用的原因。

这是一篇关于使用 fluent 配置映射的好文章:http://msdn.microsoft.com/en-us/data/jj591617.aspx

  • 为了帖子的利益,将评论作为答案移动。 -

【讨论】:

  • 所有正确,但这如何解释为什么 EditorForDisplayFor 对于同一属性 ID 显示完全不同的值?
  • 您的编辑器和显示模板是什么样的?我的猜测是在这些背后发生了一些事情。
  • 我不知道,我不是问题所有者 :) 如果模板会导致问题,他将需要一个 Guid(如 Guid.cshtml)的编辑器模板。但是仍然很奇怪为什么重命名属性不改变其类型会对显示产生任何影响。
  • 大声笑我以为你是 OP ;) 我认为类型必须相同。
猜你喜欢
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2017-08-20
  • 2015-02-11
  • 2019-06-12
  • 1970-01-01
相关资源
最近更新 更多