Fluent API:另一种配置实体类的方式,它比DataAnnorations提供了更多的配置

其中EntityTypeConfiguration这个类提供了重要的属性、方法来配置对应的实体类,可以通过protected override void OnModelCreating(DbModelBuilder modelBuilder)的参数获取EntityTypeConfiguration<StudentInfo> studentInfoEntityConfig=new  modelBuilder.Entity<StudentInfo>();列出其中一些方法:

HasEntitySetName:配置要用于此实体类型的实体集名称。 只能为每个集中的基类型配置实体集名称。

HasKey:配置此实体类型的主键属性。

HasMany:实体类型配置一对多关系。

HasOptional:实体类型配置可选关系。 实体类型的实例将能保存到数据库,而无需指定此关系。数据库中的外键可为 null。

HasRequired:配置必须的关系,如果配置关系,实体无法保存到数据库中,外键不能为空。

HasTableAnnotation:在实体映射到的表的模型中设置注释。 稍后可在处理表时(如创建迁移时)使用此注释值。

Ignore:从模型中排除某个属性,使该属性不会映射到数据库。

Map:允许与此实体类型映射到数据库架构的方式相关的高级配置。 默认情况下,任何配置都还会应用于从此实体类型派生的任何类型。

MapToStoredProcedures:将此类型配置为使用插入、更新和删除的存储过程。 将使用过程名称和参数名称的默认约定。

Property:配置在此类型上定义的属性。

ToTable:配置此实体类型映射到的表名。

实体:

     public  class StudentInf
{
public int SID { get; set; }
public string SName { get; set; }
public int Age { get; set; }
public string Address { get; set; }
public DateTime BirthDay { get; set; }
public ClassInf ClassInf { get; set; }
}
public class ClassInf
{
public int CID { get; set; }
public string CName { get; set; }
public virtual ICollection<StudentInf> StudentInfs { get; set; }
}

配置:

(图1)

(图2)

(图3)

   public CSContext1():base("name=ConnStr")
{
}
public DbSet<ClassInf> ClassInfs { get; set; }
public DbSet<StudentInf> StudentInfs { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
EntityTypeConfiguration<StudentInf> SConfig = modelBuilder.Entity<StudentInf>();
EntityTypeConfiguration<ClassInf> CConfig = modelBuilder.Entity<ClassInf>();
//将实体映射成自定义名称的表 图1
//SConfig.ToTable("Student");
//CConfig.ToTable("Class");
//设置主键、复合主键
SConfig.HasKey(S => new {S.SID,S.SName});
CConfig.HasKey(c => c.CID);
//拆分表 图2
//SConfig.Map(m => {
// m.Properties(p => p.ID);
// m.Properties(p => p.SName);
// m.ToTable("StudentMaster");
//}).Map(m => {
// m.Properties(p => p.ID);
// m.Properties(p => p.Address);
// m.Properties(p => p.Age);
// m.Properties(p => p.BirthDay);
// m.ToTable("StudentDetial");
//});
//设置列属性 图3
SConfig.Property(s => s.Address).HasColumnName("地址").HasColumnOrder().HasColumnType("Nvarchar").IsUnicode(true).IsOptional().HasMaxLength();
//设置存储过程 图3
CConfig.MapToStoredProcedures(m => m.Update(u =>
{
u.HasName("Class_procedure").Parameter(c => c.CName, "ClassName");
}));
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<CSContext1>());
base.OnModelCreating(modelBuilder);
}
MapToStoredProcedures 上图中只自定义了Update的存储过程,而insert和Delete的存储过程自动生成默认的
        static void Main(string[] args)
{
var context = new CSContext1();
context.StudentInfs.ToList();
Console.WriteLine("OK");
Console.ReadKey();
}

小白学习之Code First(五)的更多相关文章

  1. Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】

    类和对象 (简单的了解一下这个概念,初步有个印象,这个概念很重要,后面会着重讲) 类:具有相同属性和方法的对象的集合: 对象:万物皆对象: 概念很抽象(每当我看不到概念的时候,我就会通过举例来理解) ...

  2. 小白学习之Code First(四)

    code first :约定大于配置(通过配置实体重写约定) 通过两种方式配置实体:DataAnnotations      Fluent Api System.ComponentModel.Data ...

  3. 小白学习之Code First(三)

    上下文Context类中的base构造器的几个方法重置(1.无参 2.database name 3 . 连接字符串) 无参:如果基类base方法中无参,code first将会以 :{Namespa ...

  4. 小白学习之Code First(二)

    Code First约定: 注:EDMX模板 (SSDL:存储模型=>数据库表 ,CSDL:概念模型=>实体,C-S模型=>存储和概念模型之间的映射关系) System.Data.E ...

  5. 小白学习之Code First(一)

    1.根据自己的理解,Code First :通过实体类和相关配置生成对应的数据库,实现实体和数据库的映射关系,或通过实体类和相关配置与已经生成的实体与已经存在的数据库搭建映射关系 例: 实体类:Stu ...

  6. 【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来

    [Unity Shaders]学习笔记——SurfaceShader(五)让纹理动起来 转载请注明出处:http://www.cnblogs.com/-867259206/p/5611222.html ...

  7. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  8. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  9. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

随机推荐

  1. WPF wpf中按钮操作权限控制

    权限控制我们有很多种方式可以实现. 这次项目中做个简单的权限控制,我们在所有按钮触发前判断,有权限则可执行. 我们自定义一个命令类. public class DelegateCommand : IC ...

  2. 违反了引用完整性约束。Dependent Role 具有多个具有不同值的主体。S级乌龙,自己制造的笑话

    项目中碰到一个错误,捯饬了一个半小时没解决,吃完饭继续搞~ EF新增多表管理数据时报错:违反了引用完整性约束.Dependent Role 具有多个具有不同值的主体. 最终问题解决后,完全是因为自己的 ...

  3. RabbitMQ之消息持久化(转)

    原文地址 https://blog.csdn.net/u013256816/article/details/60875666/ 消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证 ...

  4. linux中权限

    $ ls -l /bin/bash -rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash -rwxr-xr-x 包含该特殊文件的权限的符号表示.该 ...

  5. docker rpm 下载地址

    http://yum.dockerproject.org/repo/main/centos/7/Packages/

  6. Exp2 后门原理与实践 20164321 王君陶

    Exp2 后门原理与实践 20164321 王君陶 一.实验内容 基础问题回答: 1.例举你能想到的一个后门进入到你系统中的可能方式? 答:通过漏洞,点击陌生链接,或者浏览不良网页挂马. 2.例举你知 ...

  7. ansible 的第一次亲密接触

    如何添加一台机器 编辑 /etc/ansible/hosts 添加本机的 public ssh key 到目标机器的 authorized_keys 添加本机的 私钥 到 ansible 运行 ans ...

  8. 话谈C#第二天

    今天做了几个小小的练习,和大家分享一下. 1.用*打印出等腰三角形,代码如下: static void Main(string[] args) { int n = 5; for (int i = 1; ...

  9. php7 改为从栈上分配内在的思路

    php7的特点是规则上不从堆上分配内存,改为从栈上分配内存, 因为有些场景是从堆上分配内在后,还要手动释放内存,利用栈分配内在快的特点,在有需要的时候,再在堆上分配内在 但是栈上分配的内存,不能返回, ...

  10. thuwc2019总结

    275,是我的自己的估分 而350,是面试线 就发挥而言,这次的发挥相当糟糕,第一天选择全场打暴力而不打签到题正解,第二天因A题思路想偏造成2h额外时间花费.第二题与第三题之间,我选择了难打的第三题而 ...