在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 ...
随机推荐
- 详解----memcache服务端与客户端
Memcache是danga.com的一个项目,用这个缓存项目来构建自己大负载的网站,来分担数据库的压力. 它可以应对任意多个连接,使用非阻塞的网络IO.由于它的工作机制是在内存中开辟一块空间,然后建 ...
- pm2 服务器命令
1..配置日志文件路径 命令:pm2 start /home/admin/node/fotonIp/bin/www --name ip -i 4 -o "/app/node/logs ...
- 进入docker容器并执行命令的的3中方法
进入docker容器并执行命令的的3中方法 docker exec nsenter docker attach "container" 建议使用nsenter, exec有 ...
- Freemaker基于word模板动态导出汇总整理
Freemaker基于word模板动态导出汇总整理 一.使用的jar包: 二.Word模板动态导出的基本思路: 1.首先通过自己在word中创建好需要导出的word文本+表格的模板,模板中需要填写内容 ...
- Cluster - 基本概念
1.1 什么是集群 简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点(node).一个理想的集群是,用户从来不会意识到集群系统 ...
- 文档对象模型 DOM
1 DOM概述 1.1 什么是DOM 文档对象模型 Document Object Model 文档对象模型 是表示和操作 HTML和XML文档内容的基础API 文档对象模型,是W3C组织推荐的处理可 ...
- Spring的datasource配置详解【转】
一句话,Spring对Hibernate的整合,是在applicationContext.xml中配置sessionFactory来实现的,其中sessionFactory中要装配dataSource ...
- Python全栈学习:匿名函数使用规范
匿名函数,当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x) ...
- Python中的dict
dict_lst = [ ('字典的键必须可哈希',), ('字典的键重复覆盖',), ('字典可迭代') ('增',), ('删',), ('改',), ('查',), ('练习',), ] 字典的 ...
- poj 2139 奶牛拍电影问题 floyd算法
题意:奶牛拍一系列电影,n头牛拍m部电影,同一部电影种的搭档们距离为1,求最小距离? 思路:Floyd 图 最短路径 存图: 初始化图 for (int i = 0; i <= n; i++) ...