博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在LINQ TO SQL 中使用MVC3中的DataAnnotations 【MetadataType】
阅读量:5107 次
发布时间:2019-06-13

本文共 2434 字,大约阅读时间需要 8 分钟。

原文发布时间为:2011-04-07 —— 来源于本人的百度文章 [由搬家工具导入]

让自动生成model不会覆盖自己添加过的model属性[attribute] MetadataType

在LINQ TO SQL 中使用MVC3中的DataAnnotations 【MetadataType】

==========================

1、LINQ TO SQL 自动生成的dbml 文件 不用去动它

2、设计一个对应实体类的接口,如Album 实体类,则可以设计如下接口

public interface IAlbum

    {
        int AlbumId { get; set; }
        int GenreId { get; set; }
       // int ArtistId { get; set; }
        [Required(ErrorMessage = "Be Required")]
        string Title { get; set; }
        decimal Price { get; set; }
        string AlbumArtUrl { get; set; }
    }

3、在写一个 Album 的部分类 实现接口 IAlbum

  public partial class Album : IAlbum

    {
    }

4、在部分类上面添加特性 [MetadataType(typeof(IAlbum))]

   [MetadataType(typeof(IAlbum))]

    public partial class Album : IAlbum
    {
    }

=====草稿代码如下:

namespace TestLin.Models

{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel;
    using System.Web.Mvc;
    [MetadataType(typeof(IAlbum))]
    [Bind(Exclude = "AlbumId")]
    public partial class Album : IAlbum
    {
    }
    public interface IAlbum
    {
        int AlbumId { get; set; }
        int GenreId { get; set; }
        int ArtistId { get; set; }
        [Required(ErrorMessage = "Be Required")]
        string Title { get; set; }
        decimal Price { get; set; }
        string AlbumArtUrl { get; set; }
    }
}

 

原文:

As I said in my original answer to this question, you should use an interface. The answer posted after mine (which was marked as Accepted) said to use a class. This is not as good. An interface is a better option for the following reasons:

1、If there is a mismatch between the name in your LINQ class and the name in your interface, the compiler will flag it for you

2、An interface can not be instantiated, so this protects class users from accidentally instatntiating the metadata type

3、If you use Resharper (or similar), the interface can be automatically extracted from the LINQ class

4、An interface is less verbose than an empty class

5、If you program against interfaces rather than classes (which is a good practice), then you've already got an interface you can use as your metadata type

For a class called, say "User", create an interface for it (say 'IUser'), and then update the definition of your partial User class as follows:

[MetadataType(typeof(IUser))]
publicclassUser:IUser

Then, in your IUser interface, add appropriate Data Annotation attributes to the properties:

[Required]     
[StringLength(50,ErrorMessage="Username cannot exceed 50 characters")]
stringUsername{get;set;}

转载于:https://www.cnblogs.com/handboy/p/7163969.html

你可能感兴趣的文章
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
OracleOraDb11g_home1TNSListener服务启动后停止,某些服务在未由其他服务或程序使用时将自己主动停止...
查看>>
Redis用户添加、分页、登录、注册、加关注案例
查看>>
练习2
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>