• 使用 Fluent API 配置/映射属性和类型


    配置EF使之在映射数据时绕开约定:注释和Fluent API。注释仅涵盖一部分Fluent API功能。

    通过重写DbContext上的OnModelCreating方法来访问Code First Fluent API。

    属性映射

    Property方法用于为每个属于实体或复杂类型的属性配置特性。Property方法用于获取给定属性的配置对象。配置对象上的选项特定于要配置的类型(IsUnicode只能用于字符串属性)

    配置主键

    有关主键的实体框架约定如下:

    1. 类定义名称称为“ID”或“Id”的属性
    2. 或类名后跟“ID”或"Id"

    要显示将某个属性设置为主键,可使用HasKey方法。

    modelBuilder.Entity<Person>().HasKey(t => t.Id)
    

    配置组合主键

    modelBuilder.Entity<Person>().HasKey(t => new { t.Id ,t.Name});
    

    关闭数值主键标识

    modelBuilder.Entity<Person>().Property(t => t.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    

    指定属性的最大长度

    如果超出最大长度,将引发DbEntityValidationException异常

     modelBuilder.Entity<Person>().Property(t => t.Name)
                .HasMaxLength(50);
    

    将属性配置为必须

    modelBuilder.Entity<Person>().Property(t => t.Name)
                .IsRequired();
    

    指定不将CLR属性映射到数据库中的列

    modelBuilder.Entity<Person>().Ignore(t => t.Name);
    

    将CLR属性映射到数据库中的特定列

    以下将Name CLR属性映射到数据库中的"myNmae"列

     modelBuilder.Entity<Person>().Property(t => t.Name)
                .HasColumnName("myname");
    

    配置字符串属性是否支持unicode内容

    默认情况下,字符串为Unicode(sqlserver中的nvarchar),可以使用IsUnicode方法指定字符串为varchar类型

    modelBuilder.Entity<Person>()
                .Property(t => t.Name).IsUnicode(false);
    

    配置数据库列的数据类型

    modelBuilder.Entity<Person>()
                .Property(t => t.Name).HasColumnType("varchar");
    

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

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

    类型映射

    将类型指定为复杂类型

    按约定,没有指定主键的类型将被视为复杂类型。在一些情况下,Code First不会检测复杂类型

    modelBuilder.ComplexType<Details>();
    

    指定不将CLR实体类映射到数据库中的表

    modelBuilder.Ignore<OnlineCourse>();
    

    将CLR实体类型映射到数据库中的特定表

    modelBuilder.Entity<Department>()  
    .ToTable("t_Department");
    

    也可以指定架构名称

    modelBuilder.Entity<User>().ToTable("User","System");
  • 相关阅读:
    js倒计时的实现
    用Math获取随机数的方法抽奖
    计算器的实现
    放大镜
    关于轮播图,我知道的不多。
    jqery标签页
    jQuery鼠标划入划出
    说说手机页面
    简单说说tab标签页和轮播图
    前端中的那些小事
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4612003.html
Copyright © 2020-2023  润新知