爲了體驗實體框架的新功能,我創建了一個新的MVC 4互聯網應用程序。
我將它連接到現有的數據庫並使用dbContext生成器生成Model類。EF 5數據庫首先使用自定義驗證
通過運行該應用程序,我在編輯表單時遇到了一些驗證錯誤。作爲DateTime字段的示例,如果日期插入爲「2012年12月10日」而不是2012-10-12(如SQ Server表示法中所示),系統就會抱怨。
我試圖在項目中找到驗證代碼,但在生成的代碼中找不到它。
我的一個模型類如下:
public partial class Artist
{
public Artist()
{
}
public int Id { get; set; }
public string Name { get; set; }
public Nullable<System.DateTime> DateOfBirth { get; set; }
public virtual Countries Countries { get; set; }
}
如果使用數據庫第一種方法我怎樣才能定製驗證錯誤?
如果我用我的驗證屬性裝飾模型,那麼一旦模型類再次生成,它們將被擦除。
此外,在一個「現實世界」項目中,現有數據庫的使用是強制性的,那麼在開發模型類時最好的方法是什麼?
通過添加具有相同名稱的部分類來擴展自動生成的類?
EDIT(介紹視圖的一部分):
@using (Html.BeginForm()) {
@Html.ValidationSummary(false)
<fieldset>
<legend>Movie</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DateOfBirth)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DateOfBirth)
@Html.ValidationMessageFor(model => model.DateOfBirth)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
您的觀點是什麼樣子?在MM/DD/YYYY格式中輸入日期應該沒有問題,因爲在將它發送到SQL Server之前,它會在.net中轉換爲DateTime。因此,在你看來,你必須做一些有點過分的事情。除非您嘗試以DD/MM/YYYY格式輸入日期,在這種情況下,這是一個全球化問題,這是一個完全不同的問題。但是,您給出的示例不應該給出任何驗證錯誤,因爲它的使用方式都是有效的(儘管如果使用DD/MM/YYYY,顯然可能不會給出結果) –
您可以使用Fluent API添加驗證約束:http: //msdn.microsoft.com/en-us/data/gg193959.aspx – millimoose
@millimoose - 這些約束只適用於數據庫,而不適用於MVC驗證。 –