• 使用 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");
  • 相关阅读:
    android webview内存泄露解决方法
    使用adb安装遇到的一些坑
    androidstudio在创建new project时,窗口太大,看不到下面确定按钮的解决方法
    android切换前后台状态监听
    android设置系统横屏方案
    android判断adb调试是否打开及代码跳转到开发者选项界面
    xml布局解析报错的可能原因
    Android:防止过快点击造成多次事件 问题
    android Information:Gradle tasks [:dl_version:generateDebugSources, :dl_version:generateDebugAndroidTestSources导致无法实现Preview功能
    Android定位服务关闭和定位(悬浮)等权限拒绝的判断
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4612003.html
Copyright © 2020-2023  润新知