我想爲我的應用程序使用MVC 3和實體框架。使用實體框架模型/數據庫首先進行MVC3驗證
該模型將存儲在與MVC應用程序不同的程序集中。
我正在做的選擇是使用EF來生成我的實體或首先使用代碼。
隨着代碼第一,我可以用[必填]等裝飾成員......但如果EF已經從數據庫中生成實體,我將如何去添加這些屬性?
讓EF生成我的實體會節省很多時間,但是我希望MVC自動填充驗證,具體取決於我如何裝飾我的成員。這有意義嗎?如果是這樣,我該怎麼做?
我想爲我的應用程序使用MVC 3和實體框架。使用實體框架模型/數據庫首先進行MVC3驗證
該模型將存儲在與MVC應用程序不同的程序集中。
我正在做的選擇是使用EF來生成我的實體或首先使用代碼。
隨着代碼第一,我可以用[必填]等裝飾成員......但如果EF已經從數據庫中生成實體,我將如何去添加這些屬性?
讓EF生成我的實體會節省很多時間,但是我希望MVC自動填充驗證,具體取決於我如何裝飾我的成員。這有意義嗎?如果是這樣,我該怎麼做?
在這種情況下,使用MetadataTypeAttribute。您可以將其與部分類組合以實現預期的結果
順便說一下,在您決定使用Database First和Code First設計之間的時候,我會做更多的研究。這一切都不是關於生成實體時節省時間,這兩種方法之間的差異更大。爲了節省時間,您可以使用EF Power Tools從數據庫生成代碼優先實體 - 很簡單。比汽車
更好地生成你的實體,我建議你使用代碼優先或現有的數據庫映射到POCO的類(不產生實體,只是用手工創建它們,並將它們映射到現有的數據庫)
Scottgu寫了關於using EF "Code First" with an existing database。
檢查了這一點: 在你的模型模板(擴展model.tt文件),你可以破解這個模板生成的裝飾,在這個例子中,我添加[必填]裝飾加上一條錯誤消息
var simpleProperties = typeMapper.GetSimpleProperties(entity);
if (simpleProperties.Any())
{
foreach (var edmProperty in simpleProperties)
{
if(!edmProperty.Nullable)
{#>
[Required(ErrorMessage="<#=String.Format("The field {0} is required",edmProperty.ToString())#>")]<#
}#>
<#=codeStringGenerator.Property(edmProperty)#><#
}
}
所以結果是這樣的
[Required(ErrorMessage="The field Id is required")]
public long Id { get; set; }
PS:您還可以通過編輯模板添加 using System.ComponentModel.DataAnnotations;
。
希望這可以幫助你。
謝謝,當我這樣做時,我得到曖昧的名稱錯誤。這裏是我在我的部分類(該實體稱爲模型中的項目)中的內容: – Paul
[MetadataType(typeof(Item))] public partial class Item { [StringLength(10),必需] public字符串MaterialName { get; 集; } } – Paul
保羅,模糊'可能'與預先存在的edmx ef文件可能? –