zoukankan      html  css  js  c++  java
  • 使用 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");
  • 相关阅读:
    SqlServer 查看被锁的表和解除被锁的表
    Windows Server 2012 R2 或 2016 无法安装 .Net 3.5.1
    请求文件下载URL过长处理
    T4语法
    windows下 安装 rabbitMQ 及操作常用命令
    ubuntu系统启动qtceator时提示:Qt5.5.1/Tools/QtCreator/lib/qtcreator/plugins/libHelp.so: 无法加载库
    升级到VS2013常见问题
    Windowns 无法启动 Office Software Protection Platform 服务,系统找不到指定的文件
    SVN clean失败解决方法
    使用PostSharp在.NET平台上实现AOP
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4612003.html
Copyright © 2011-2022 走看看