2013-09-25 108 views
2

我剛纔在ASP.NET MVC 4應用程序中遇到了一個奇怪的問題。我創建了一個實體框架模型,其中包括對象A爲什麼這個EF屬性返回另一個屬性的值?

Object definition

物業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> 

結果:

Result

玩了一點之後,我決定簡單地改變ID屬性的名稱。編輯字段立即開始顯示正確的GUID值。

是什麼導致了這種行爲?ID Entity Framework中主鍵的保留屬性名稱,還是與某些MVC命名約定(樣式爲xxxController)衝突?

+2

默認實體將假定ID是你的PK。你可以改變這個w/Fluent API。這就是爲什麼改變名稱的原因。 – Botonomous

+1

@鄧巴:請添加您的評論作爲答案。 OP不會得到更好的。 –

+0

@ChrisPratt會做,謝謝Chris – Botonomous

回答

2

默認實體將假定ID是你的PK。你可以改變這個w/Fluent API。這就是爲什麼改變名稱的原因。

這裏是一個很好的寫了上用流利的配置您的映射:作爲答案後的好處http://msdn.microsoft.com/en-us/data/jj591617.aspx

  • 移動評論。 -
+0

所有正確的,但是這怎麼解釋爲什麼'EditorFor'和'DisplayFor'爲相同的屬性'ID'顯示完全不同的值? – Slauma

+0

你的編輯器和顯示模板是什麼樣的?我的猜測是有些事情正在發生。 – Botonomous

+0

我不能說,我不是問題所有者:)如果模板應該引起問題,他需要有一個「Guid」的編輯器模板(比如'Guid.cshtml')。但是,爲什麼*重命名屬性*而不改變它的類型*應該對顯示有任何影響仍然很奇怪。 – Slauma

相關問題