在LINQ TO SQL 中使用MVC3中的DataAnnotations 【MetadataType】
原文发布时间为:2011-04-07 —— 来源于本人的百度文章 [由搬家工具导入]
http://stackoverflow.com/questions/1535662/asp-net-mvc-linq-to-sql-data-annotation-validation
让自动生成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;}
在LINQ TO SQL 中使用MVC3中的DataAnnotations 【MetadataType】的更多相关文章
- 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join
在Linq to sql 和 Entity framework 中使用lambda表达式实现left join 我们知道lambda表达式在Linq to sql 和 Entity framework ...
- linq to sql: 在Entityfamework Core中使用多个DbContext
最近在学习DotNetCore并做一个自己的小项目,分为了多个数据库,AccountDbContext和BlogDbContext, 发blog的时候需要用到Account的信息,但是再Blog中只记 ...
- LINQ之路10:LINQ to SQL 和 Entity Framework(下)
在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术 ...
- LINQ之路 9:LINQ to SQL 和 Entity Framework(上)
在上一篇中,我们从理论和概念上详细的了解了LINQ的第二种架构“解释查询”.在这接下来的二个篇章中,我们将使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的 ...
- LINQ To SQL
议程 1.LINQ To SQL概述 2.LINQ To SQL对象模型 3.LINQ To SQL查询 用到的数据库 SQL Server 2005,数据库名为Test. 两张表,分别为Studen ...
- Linq之Linq to Sql
目录 写在前面 系列文章 Linq to sql 总结 写在前面 上篇文章介绍了linq to xml的相关内容,linq to xml提供一种更便捷的创建xml树,及查询的途径.这篇文章将继续介绍l ...
- 20150222—LINQ to SQL 插入、更新和删除
注意,使用LINQ to SQL时, 表中必须有一个主键才可以起效,否则系统将无法对数据作出修改 插入新数据,根据上一片的文章实例在其中添加新的控件: 编号TextBox(Name):sno 名字Te ...
- LINQ To SQL 处理 DateTime?
LINQ To SQL 处理 DateTime? 类型 例子: 搜索栏含有最后扫描时间的日期(DateTime?)与多个其他条件(String) 现在需要写一个查询 : 查询符合最后扫描的日期的查询 ...
- Linq to SQL各种参考
原文:https://www.cnblogs.com/lyj/archive/2008/01/23/1049686.htmlhttps://www.cnblogs.com/lyj/archive/20 ...
随机推荐
- html +css 登陆框中加用户图片,并设置登陆名不盖住图标
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MySQL - GROUP_CONCAT 使用方法
如上图,我想把结果集中的三行链接成一行,则可这样写: 总结: GROUP_CONCAT函数默认是用','逗号链接,如果你加上第二个参数,则以',第二个参数值'逗号+第二个参数值链接,如下图 ...
- 整合mybatis和spring时 Error creating bean with name 'sqlSessionFactory' defined in class path resource
今天在整合mybatis和spring的时候出的错 报错如下 Exception in thread "main" org.springframework.beans.factor ...
- PHP使用CURL_MULTI实现多线程采集
$connomains = array( "http://www.baidu.com/", "http://www.hao123.com/", "ht ...
- PHP如何严格控制session过期时间
第一种回答 那么, 最常见的一种回答是: 设置Session的过期时间, 也就是session.gc_maxlifetime, 这种回答是不正确的, 原因如下: 1. 首先, 这个PHP是用一定的概率 ...
- lnmp启用pathinfo并隐藏index.php
编辑如下区段: location ~ [^/]\.php(/|$) { # comment try_files $uri =404; to enable pathinfo try_files $uri ...
- Java List 的深拷贝
老是会遇到深拷贝与浅拷贝的问题,这里进行了一些測试.代码例如以下: </pre><pre name="code" class="java"&g ...
- Air Pollution【空气污染】
Air Pollution Since the 1940s, southern California has had a reputation for smog. 自20世纪40年代以来,南加利福尼亚 ...
- CCPC_1003
这个题可以暴力的哟,直接暴力的哟 不用做什么订立的哟 不需要特别判断的哟 去死吧!!!愚蠢的我! #include<bits/stdc++.h> using namespace std; ...
- Redis实现之整数集合
整数集合 整数集合(insert)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现.举个栗子,如果我们创建一个只包含五个 ...