博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeFirst Fluent API
阅读量:5038 次
发布时间:2019-06-12

本文共 3011 字,大约阅读时间需要 10 分钟。

EF的好处之一就是实现了概念模型和存储模型的分离,我们可以为概念实体和存储实体起不同的名称,同时还可以将一个概念实体映射到多个存储实体,实现实体之间一对多或多对多的关系。

在CodeFirst里面为了处理这种概念实体和存储实体的对应关系,因此Fluent API就出现了。

下面就开始介绍Fluent API

先设置概念实体类

public class Blog    {        public int Id { get; set; }        public int BlogId { get; set; }        public string Title { get; set; }        public string BloggerName { get; set; }        public string Test { get; set; }        public virtual ICollection
Posts { get; set; } } public class Post { public int Id { get; set; } public string Content { get; set; } public int FKBlogId { get; set; } public Blog Blog { get; set; } public ICollection
Comments { get; set; } } public class Comment { public int Id { get; set; } public string Content { get; set; } public ICollection
Posts { get; set; } }

第一步 创建类BlogContext 派生于 DbContext 重写里面的方法 OnModelCreating

public class BlogContext : DbContext    {        public DbSet
Blogs { get; set; } public DbSet
Posts { get; set; } public DbSet
Comments { get; set; } public DbSet
Suppliers { get; set; } public class BlogContextInitializer : DropCreateDatabaseIfModelChanges
{ protected override void Seed(BlogContext context) { base.Seed(context); } } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }

  第二步 实现概念模型和存储模型之间的映射

1、给表Blog设置主键

注:如果没有给实体设置主键,那么EF会默认的设置ID或者[类名+ID]的列为主键,如果两个都存在,EF则会以ID为主键

modelBuilder.Entity
().HasKey(c=>c.Id);

2、概念实体映射到存储实体的实体名改变

modelBuilder.Entity
().ToTable("Blog","Blogs");

3、给存储模型设置别名,EF的强大之处在于概念模型和存储模型对应的字段的名称可以不一样,但它还能认识,我估计是以键对值的方式在存储别名

modelBuilder.Entity
().Property(t => t.Test).HasColumnName("TestName");

4、设置实体之间一对多的关系 同时指定了Blog的外键:FK_BlogId

modelBuilder.Entity
().HasRequired(p => p.Blog) .WithMany(b => b.Posts) .HasForeignKey(p => p.FK_BlogId);

5、设置实体之间多对多的关系 实现多对多的关系是建立一张两表对应的关系表

  

modelBuilder.Entity
().HasMany(p => p.Comments) .WithMany(c => c.Posts).Map(mc => { mc.ToTable("ComtentToPost"); mc.MapRightKey("CommentId"); mc.MapLeftKey("PostId"); });

6、设置存储实体的字段为非空类型

modelBuilder.Entity
().Property(c => c.Title).IsRequired();

7、设置字段长度

modelBuilder.Entity
().Property(c => c.Title).HasMaxLength(12);

8、设置字段类型

modelBuilder.Entity
().Property(c => c.BloggerName).HasColumnType("varchar");

 这里列出了Fluent API 常用的几个。以后学习新东西的会坚持写博客,这样不仅对所学知识进行梳理,也能加强自身印象。

 

转载于:https://www.cnblogs.com/zhanghonjiang2011/archive/2012/04/26/2471528.html

你可能感兴趣的文章
IO流之File类
查看>>
sql 基础语句
查看>>
CF717A Festival Organization(第一类斯特林数,斐波那契数列)
查看>>
控件发布:div2dropdownlist(div模拟dropdownlist控件)
查看>>
Oracle composite index column ordering
查看>>
kaggle竞赛
查看>>
区块链入门教程
查看>>
npm常用命令
查看>>
南海区行政审批管理系统接口规范v0.3(规划)4.2.【queryExpireList】当天到期业务查询...
查看>>
[置顶] 细说Cookies
查看>>
[wp7软件]wp7~~新闻资讯,阅读软件下载大全! 集合贴~~~
查看>>
生成指定位数随机数的方法
查看>>
Essential C++学习笔记
查看>>
where,having与 group by连用的区别
查看>>
【MySQL】MySQL锁和隔离级别浅析二 之 INSERT
查看>>
Oracle T4-2 使用ILOM CLI升级Firmware
查看>>
4.14上午
查看>>
数据分析 -- 白话一下什么是决策树模型(转载)
查看>>
Java SPI机制原理和使用场景
查看>>
web前端java script学习2017.7.18
查看>>