2010-12-18 23 views
3

我正在通過Scott Hanselman的書通過如何創建NerdDinner MVC應用程序。在Visual Studio或插件中是否有工具可以自動創建好友類驗證?

要驗證實體數據模型嚮導生成的實體類型Dinner,他首先使用部分類別技巧擴展實體Dinner,然後使好友類與Dinner關聯。

有關詳細信息,請參閱以下代碼。

using System.ComponentModel.DataAnnotations; 

namespace NerdDinner.Models 
{ 
    [MetadataType(typeof(DinnerValidation))] 
    public partial class Dinner { } 

    public class DinnerValidation 
    { 
     [Required(ErrorMessage = "Title is required")] 
     [StringLength(50, ErrorMessage = "Title may not be longer than 50 characters")] 
     public string Title { get; set; } 

     [Required(ErrorMessage = "Description is required")] 
     [StringLength(256, ErrorMessage = "Description may not be longer than 256 characters")] 
     public string Description { get; set; } 

     [Required(ErrorMessage = "Addresss is required")] 
     public string Address { get; set; } 

     [Required(ErrorMessage = "Country is required")] 
     public string Country { get; set; } 

     [Required(ErrorMessage = "Contact phone is required")] 
     public string ContactPhone { get; set; } 
    } 
} 

我的問題是

是否有一個「方便」的方式創建和好友類晚餐關聯?我的意思是我們可以在Visual Studio或任何插件中使用工具來創建好友類並自動將好友與Dinner關聯。當然,我應該對生成的代碼進行一些調整以適應我的需要,但這不是一個大問題。

編輯1: 我會添加一些額外的信息。實體數據模型嚮導很有用,因爲它基於數據庫模式創建模式驗證。例如,DinnerId屬性默認設置爲Int32,以匹配int類型的DinnerID類型。

回答

0

是的。它看起來像你正在創建一個域服務。如果是這種情況,那麼當您創建域服務時,可以選擇generated associated classes for metadata(窗口底部)。該文件將被稱爲yourDomainServiceName.metadata.cs。

該文件在字段中不會有任何註釋,因此您必須自己執行此操作。

1

使用實體數據模型嚮導不可能開箱即用。但是你可以做的是擴展Generator(生成實體的.tt文件)並讓它添加[MetadataType(typeof(<#classname#> Validation))]。通過這種方式,所有生成的實體已經爲好友分類做好了準備......然後您不必設置單獨的部分類來進行關聯。接下來,您可以親手製作好友類,或者最終在「Microsoft」生成的實體旁邊生成它們是單獨的文件或與所有好友類一起的一個文件。我們使用與您使用自追蹤實體描述的方法相同的方法。起初它是一點點工作。但它確實值得。因爲您可以在任何給定的點上驗證可靠的類:客戶端,服務層,業務訪問層等。還必須設置數據庫外的所有驗證條件。我們已經研究瞭如何從.edmx生成這個文件,但發現它更具有吸引力,可以爲30多個類別手動指定它們。幾個小時工作,但之後它是展示時間! ;)在自動生成的驗證標準中,可能不太可維護,然後生成好友類,但是到處都是折衷(花費幾天/周來擴展標準模板)。祝你好運!

+0

有關於如何定製.tt文件的好教程?我不知道要做這種先進的方法。 – xport 2010-12-18 18:57:18

+0

不知道我的頭......但做一點研究會幫助你進一步猜測......並且實驗一下會幫助你學習,我已經在T4模板中進行了一些修改以及僅僅通過試驗錯誤和使用我的結構化思維能力;) – 2010-12-18 19:24:34

相關問題