簡體   English   中英

Visual Studio或插件中是否有工具可以自動創建好友類驗證?

[英]Is there a tool in Visual Studio or plug-in to automate creating buddy class validation?

關於如何創建NerdDinner MVC應用程序,我接受了Scott Hanselman的書。

為了驗證由實體數據模型向導生成的實體類型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中的工具或任何插件來創建好友類並自動將好友與晚餐相關聯。 當然我應該對生成的代碼進行一些調整以滿足我的需要,但這不是一個大問題。

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

使用實體數據模型向導不可能開箱即用。 但你可以做的是擴展Generator(生成實體的.tt文件)並讓它添加[MetadataType(typeof(<#classname#> Validation))]。 這樣,所有生成的實體都已准備好進行伙伴分類......那么您不必設置單獨的分部類來進行關聯。 接下來,您可以手動制作好友類或最終生成它們與“Microsoft”生成的實體一起是單獨的文件或一個文件與所有好友類一起。 我們使用與您在自我跟蹤實體中描述的方法相同的方法。 而起初它是一點點的工作。 但它確實值得。 因為您可以獲得可以在任何給定點驗證的堅如磐石的類:客戶端,服務層,業務訪問層等。此外,您還必須在數據庫中設置所有驗證條件。 我們已經研究了從.edmx生成這個的方法,但發現用30多個類左右手動指定它們更有吸引力。 幾個小時的工作,但之后它是showtime! ;)可能較少可維護,然后生成伙伴類自動生成的驗證標准,但無處不在是一個權衡(花費數天/周來擴展標准模板)。 祝好運!

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

該文件在字段上沒有任何注釋,因此您必須自己完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM