zoukankan      html  css  js  c++  java
  • FluentAPI详细用法

    •  什么是Fluent API?

      官方答案:EF 中内嵌的约定将 POCO 类映射到表。但是,有时您无法或不想遵守这些约定,需要将实体映射到约定指示外的其他对象,所以Fluent API和注解都是一种方法,这两种方法是用来配置EF,在映射属性时绕开约定。详情参考(https://msdn.microsoft.com/zh-cn/data/jj591617)

      如何访问Fluent API?

      通过自定义类(继承自DbContext )的OnModelCreating方法访问。

      属性映射

      主要配置:主键、数值长度、配置为必须、不映射,外键等

      配置主键:

      modelBuilder.Entity<ClassA>().HasKey(t => t.ID);    //配置ClassA的ID属性为主键

      配置联合主键:

      modelBuilder.Entity<ClassA>().HasKey(t => new { t.ID, t.Name });    //配置ClassA的ID和Name为主键

      设置数据非数据库生成:

      modelBuilder.Entity<ClassA>().Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);    //ClassA的Id属性不用数据库控制生成

      设置字段最大长度:

      modelBuilder.Entity<ClassA>().Property(t => t.Name).HasMaxLength(100);     //设置ClassA类的Name属性的最大长度为100,如果值长度100,会抛出 DbEntityValidationException异常

      设置字段为必需:

      modelBuilder.Entity<ClassA>().Property(t =>t.Id).IsRequired();   //设置ClassA类的Id属性为必需   

      属性不映射到数据库:

      modelBuilder.Entity<ClassA>().Ignore(t => t.A);    //调过ClassA类的A属性,让之不映射到数据库中

      将属性映射到数据库中特定列名:

      modelBuilder.Entity<ClassA>() 
          .Property(t => t.A) 
          .HasColumnName("A_a");   //将类ClassA的属性A映射到数据库中对应列名A_a

      类中不指定外键,但在数据库中指定外键名:

      modelBuilder.Entity<Staff>() 
          .HasRequired(c => c.Department) 
          .WithMany(t => t.Staffs) 
          .Map(m => m.MapKey("DepartmentID"));    //指定员工表中DepartmentID为Staff到Department的外键

      指定属性映射的字段为Unicode类型:

      modelBuilder.Entity<ClassA>() 
          .Property(t => t.Name) 
          .IsUnicode(true); 

      设置属性映射的列的类型:

      modelBuilder.Entity<Department>() 
          .Property(p => p.Name) 
          .HasColumnType("varchar");            //设置列为varchar类型

      设置复杂类型的属性(何为复杂类型? 没指定主键的类型):

      modelBuilder.ComplexType<Details>() 
          .Property(t => t.Location) 
          .HasMaxLength(20);
      modelBuilder.Entity<OnsiteCourse>() 
          .Property(t => t.Details.Location) 
          .HasMaxLength(20);

      显示设定为复杂类型:

      modelBuilder.ComplexType<ClassA>();

      将属性配置为用作乐观并发令牌:

      方法1、用 ConcurrencyCheck 特性或 IsConcurrencyToken 方法

      modelBuilder.Entity<OfficeAssignment>() 
          .Property(t => t.Timestamp) 
          .IsConcurrencyToken();

      方法2、IsRowVersion 

      modelBuilder.Entity<OfficeAssignment>() 
          .Property(t => t.Timestamp) 
          .IsRowVersion();

      忽略类型,不映射到数据库中:

      modelBuilder.Ignore<OnlineCourse>();
  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/wfy680/p/15114020.html
Copyright © 2011-2022 走看看