专栏首页技术博客Entity Framework DataAnnotations

Entity Framework DataAnnotations

前言

DataAnnotation 特性由.NET 3.5中引进,给.NET中的类提供了一种添加验证的方式。但是在EF中它又可以对映射关系进行控制,相比较Fluent API使用起来要简单一些。

DataAnnotation特性列举

DataAnnotation由命名空间System.ComponentModel.DataAnnotations提供。下面列举实体模型中常用的DataAnnotation特性:

1.KeyAttribute:对数据库中表的主键的设置

        [Key]
        public int OrderID { get; set; }

 2.RequiredAttribute:对应数据库中字段的数据是否可以为null

        [Required]
        public string OrderName { get; set; }

 3.MaxLengthAttribute:对应数据库中字符串类型字段的最大长度

        [MaxLength(60)]
        public string Employee{get;set;}

 4.MinLengthAttribute:在数据库中无对应,但在代码中字符串最小长度

        [MaxLength(60),MinLength(10)]
        public string Employee{get;set;}

 5.ConcurrencyCheckAttribute:指定用于开放式并发检查的列的数据类型

        [ConcurrencyCheck]
        public string Address { get; set; }

 6.TimestampAttribute:将列的数据类型指定为行版本

        [Timestamp]
        public byte[] TimeStamp { get; set; }

 System.ComponentModel.DataAnnotations命名空间中只定义了部分实体验证的特性,在EntityFramework程序集中定义了更多的数据映射特性

7.DatabaseGeneratedAttribute:标记指定实体属性是由数据库生成的,并指定生成策略(None数据库不生成值,Identity当插入行时,数据库生成值,Computed当插入或更新行时,数据库生成值)

        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
        public DateTime CreateDate { get; set; }

 8.ColumnAttribute:指定实体属性在数据库中的列名及数据类型

        [Column("Notes", TypeName = "ntext")]
        public string Note { get; set; }

 9.TableAttribute:指定实体类对应的数据表名

    [Table("Order",Schema="Order")]
    public class Order

 10.ForeignKeyAttribute:指定导航属性的外键字段

    public class Customer
    {
        public int ID { get; set; }

        public string Name { get; set; }
    }
        [ForeignKey("ID")]
        public Customer customer { get; set; }

 11.NotMappedAttribute:标记指定实体属性在创建数据库中不创建对应字段

        [NotMapped]
        public string PhotoPath { get; set; }

 12.ComplexTypeAttribute:标记指定实体属性是将一个对象作为另一个对象的属性,映射到数据库中则子对象表现为多个属性字段

[ComplexType]
public class Name
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }
    }
    public Name Name { get; set; }

 对于实体关系对应的数据表关系,无非“0:1,1:1,0:N,1:N,N:N”这几种,可以使用导航属性中的数据类型来表示,0…1端使用单实体类型表 示,N端使ICollection<T>集合类型表示。对于单实体端,默认是可为空的,即为0关系,如果要设置为1关系,要使用 [Required]标签来进行标记。但对于一对一中的关系主体与依赖对象确无法做更细节的控制。

注意:DataAnnotations可以同时在同一个类后者属性上使用多个标记属性,上面的例子中对于每个类或属性只使用了一个单独的标记属性是为了说明起来更加简单;另外声明的例子中同时使用“ConcurrencyCheck”和“TimeStamp”指定了不同的列只是为了演示,一般情况下我们通过其中一种方式即可。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Entity Framework CodeFirst尝试

    Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入的功能。使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(...

    aehyok
  • C#反射的特性

    如果您现在对反射还不太了解的话,那么可以先看看这篇博文,来粗略的了解一下反射吧。什么是反射

    aehyok
  • 设计模式之二(简单工厂模式)

      简单工厂模式根据提供的数据或者参数返回几个可能的类中的一个实例,说通俗点有点像面向对象编程中的多态性,一个基类,有多个派生类,在另外的调用程序中,根据参数来...

    aehyok
  • 麻雀虽小,五脏俱全。基于Asp.net core + Sqlite 5分钟快速上手一个小项目

    方法1:在控制台输入 : dotenet add (项目名) package (包名)

    WeiMLing
  • 向服务器发送josn字符串,服务器端解析

    跟着阿笨一起玩NET
  • Windows Developer Day - Adaptive Cards

    概述 Windows Developer Day 在 Modern Application Experience 环节展示了一种可以让开发者以更通用和统一的方式...

    Shao Meng
  • 使用Entity Framework Core访问数据库(Oracle篇)

    本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。

    GuZhenYin
  • DataAnnotations - InverseProperty Attribute:

    DataAnnotations - InverseProperty Attribute: We have seen in the Code-First Conv...

    阿新
  • EF Code First 学习笔记:关系

    项目中最常用到的就是一对多关系了。Code First对一对多关系也有着很好的支持。很多情况下我们都不需要特意的去配置,Code First就能通过一些引用属性...

    跟着阿笨一起玩NET
  • 【C#】AutoMapper 使用手册

    官方文档:https://docs.automapper.org/en/latest/

    丹枫无迹

扫码关注云+社区

领取腾讯云代金券