Entity Framework中的DataAnnotations

简介:

Model使用DataAnnotations定义数据库和验证

using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations.Schema

注意这里的验证会在web客户端和EF端同时验证。

[Key]

数据库: 定义主键

[Required]

数据库: 会把字段设置成not null

验证: 会要求必须输入

是否可以为null [Required(AllowEmptyStrings = false)] 不能为null和空字符串

[MaxStringLegth]

数据库: 字段长度

验证: 验证是否超出长度

[MinStringLegth]

验证: 验证是否长度不够

[NotMapped]

不和数据库匹配的字段,比如数据库存了First Name, Last Name, 我们可以创建一个属性Full Name, 数据库中没有,但是可以使用到其它地方。

[ComplexType]

复杂类型,当你想用一个表,但是表中其它的列做成另外一个类,这个时候可以使用.

比如这里BlogDetails是Blog表的一部分,在Blog类中有个属性是BlogDetails

复制代码
[ComplexType]
public class BlogDetails
{
    public DateTime? DateCreated { get; set; }
    [MaxLength(250)]
    public string Description { get; set; }
}
复制代码

 

实际的表结构就会是这样:

jj591583_figure06(en-us,MSDN_10)

[ConcurrencyCheck]

表示并发标识, 标记为ConcurrencyCheck的列,会在更新数据前,检查有没有改变,如果改变了,说明期间发生过数据修改。这个时候会导致操作失败,出现DbUpdateConcurrencyException

[Timestamp]

这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节. 所以对应的.net 类型是Byte[]

一个表只能有一个 timestamp 列.

[Table] [Column]

用来表示数据库匹配的细节

[Table("InternalBlogs")]
public class Blog
[Column("BlogDescription", TypeName="ntext")]
public String Description {get;set;}

 

[DatabaseGenerated]

数据库中有些字段是触发器类似的创造的数据,这些不希望在更新的时候使用, 但是又想在读取出来,可以用这个标记

[DatabaseGenerated(DatabaseGenerationOption.Computed)]
public DateTime DateCreated { get; set; }

 

[ForeignKey]

复制代码
public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }  
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int BlogId { get; set; }
    [ForeignKey("BlogId")]
    public Blog Blog { get; set; }
    public ICollection<Comment> Comments { get; set; }
}
复制代码

 

[InverseProperty]

如果子表使用了ForeignKey, 父表又使用字表的Collection对象会导致,在子表中生成多个外键

这个时候,需要在父表类中的子表Collection对象上添加上这个Attribute表明会重用子对象的哪个属性作为外键。



本文转自JustRun博客园博客,原文链接:http://www.cnblogs.com/JustRun1983/archive/2012/09/26/2703241.html,如需转载请自行联系原作者

目录
相关文章
|
测试技术
PAT 1001 害死人不偿命的(3n+1)猜想
对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。
111 0
一文搞懂 Java 线程中断
在之前的一文《如何&quot;优雅&quot;地终止一个线程》中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分享的——线程中断。
|
1天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1063 0
|
10天前
|
人工智能 运维 安全
|
1天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
248 0
|
8天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
9天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
740 23