2011-05-31 60 views
0

我使用LINQ to SQL來生成一個包含數據庫表的數據庫模型的dbml文件。我想使用UIHint讓MVC在編輯模式下將一些字段顯示爲DropDownLists或Checkboxes。但是,如果我更改了文件,它將會在重新生成時丟失。我應該如何解決這個問題?我對MVC很陌生,仍然在學習。我已經爲所有CRUD元素設置了一個控制器,但現在我正在調整,並且遇到了這個問題。結合使用UIHint與LINQ to SQL生成的類

回答

2

由於Linq-to-SQL會自動生成部分類,所以您需要創建一個部分'好友類',您將在其中添加數據註釋。您的好友類會鏡像您需要修改的自動生成類的一部分。您將它們與[MetadataType(typeof(BuddyClassName))]綁定在一起當您編譯項目時,部分夥伴類和自動生成的部分類將合併在一起。

在示例中假定:

  • 你的命名空間是 「Project.Models」
  • 你的LINQ到SQL類被稱爲 「產品」

    using System.ComponentModel.DataAnnotations; 
    
    namespace Project.Models 
    { 
        [MetadataType(typeof(ProductsMeta))] 
        public partial class Products 
        { 
        // You can extend the products class here if desired. 
    
        public class ProductsMeta 
        { 
         // This is a Linq-to-Sql Buddy Class  
         // In here you can add DataAnnotations to the auto-generated partial class 
    
         [Key] 
         public int ProductKey { get; set; } 
    
         [Display (Name = "Product Name")] 
         [Required(ErrorMessage = "Product Name Required")] 
         [StringLength(255, ErrorMessage = "Must be under 255 characters")] 
         public string ProductName { get; set; } 
    
         [UIHint("MultilineText")] 
         public string Description { get; set; } 
        } 
        } 
    } 
    

這些文章非常有幫助:

  1. ScottGu: ASP.NET MVC 2: Model Validation
  2. How to: Validate Model Data Using DataAnnotations Attributes
  3. Validating with Data Annotation Validators
+0

非常感謝!由於障礙,閱讀您的文章花了一些時間,但今天,我使用了您的示例,它運行得非常好。我將閱讀這些文章來爲下拉控件創建自定義模板。幾周前我找到了創建它們的方法,所以我會再次找到它們。我沒有名譽,所以我不能給你投票。 – Leonard 2011-06-07 14:32:08

+0

歡迎您。我發現這個網站在通過我自己的項目進行工作時非常有價值。 – 2011-06-07 15:42:14

0

如果您要直接使用實體,您應該創建一個部分類並在其中添加註釋。這種方式在模型重新生成時不會丟失註釋。

+0

如果我這樣做,我可以使用相同的對象名稱,並且將合併VS既聲明? – Leonard 2011-06-01 08:05:37