Entity Framework core

----------简述 EF框架的使用-----------

EF简单来讲是对象关系映射程序。O/RM,Object/Rlation Mapping。

也就是将数据库中的内容映射到程序中的对象集合,通过访问对象便可以访问到数据库中的数据,省去了大量的底层访问代码。

microsoft EF概述

microsoft EF入门


数据库和对象集合

数据库中关系是 : 实例 → 数据库(DataBase) → 表格(table) → 列(column)

对象集合有两个概念 : 数据库上下文(DbContext) → 实体类(Entity Class)

一个实体类对象就相当于一列,一条记录,里面的每个属性对应列属性;

多个实体类对象的集合就相当于一个表格;

多个实体类对象集合存放在数据库上下文中。



EF的使用

我使用的是从代码中生成数据库,也就是在代码中指定数据库的各种表格形式。

还有根据数据库生成代码。

1. 需要使用 Nuget 获取三个包,我访问的是VS SQL

Microsoft.EntityFrameworkCore  

Microsoft.EntityFrameworkCore.SqlServer 

Microsoft.EntityFrameworkCore.Tools

EntityFrameworkCore  

EF框架主体程序包,使用记得要加上using

EntityFrameworkCore.SqlServer 

这个是用于让EF框架能够访问sql数据库的补充包,官方说法叫DataBaseProvider,microsoft提供了很多的数据库访问包。

比如InMomery,sqlite等,可以到官网查看:

microsoft 数据提供程序

EntityFrameworkCore.Tools

这是用来创建数据库和迁移数据库使用到的包,下面会有提及。



2.创建实体类和数据库上下文类

实体类:

导航属性 : 导航属性包含的不是自身记录的属性,而是外键的属性或者是自身被引用,引用者的集合。

public class Blog

{

public int BlogId { get; set; } //以ID结尾的会被认为是主键ID或者是外键ID

public string Url { get; set; } //普通属性

public List<Post> Posts { get; } = new List<Post>(); //导航属性,引用者的集合

}

public class Post

{

public int PostId { get; set; } //主键

public string Title { get; set; } //普通属性

public string Content { get; set; } //普通属性

public int BlogId { get; set; } //外键

public Blog Blog { get; set; } //导航属性

}

数据库上下文类

简而言之 :实体类对象的集合.

有两种配置数据库上下文的方法:

1.一种是使用下面的OnConfiguring,在里面使用options.UseXXX(); XXX看你连接的是什么数据库。

PS : OnConfiguring可以使用判断来作为默认配置, options.IsConfigured可以判断是否已经配置过了,第二种方法会置位这个标志位。

using Microsoft.EntityFrameworkCore;

public class BloggingContext : DbContext

{

public DbSet<Blog> Blogs { get; set; } //实体类的集合,就相当于一个表格

public DbSet<Post> Posts { get; set; } //实体类的集合

protected override void OnConfiguring( DbContextOptionsBuilder options) => options.UseSqlServer(这里填入连接字符串);

//@"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=dataBase;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"

//连接字符串,要注意的是initial Catalog必须填写

}

2.第二种

//在上下文头部定义

public BloggingContext(DbContextOptions<BloggingContext> options) : base(options){ }

//在外部调用的时候

var optionBuider = new DbContextOptionsBuilder();

var options = optionBuider.UseSqlServer("连接字符串").Options;

using (var db = new BloggingContext ( options  ));

3.配置模型

Microsoft 配置模型

配置模型有两种方法:

1.fluent API

在派生上下文中覆写 OnModelCreating 方法,并使用 ModelBuilder API 来配置模型。 此配置方法最为有效,并可在不修改实体类的情况下指定配置。 Fluent API 配置具有最高优先级,并将替代约定和数据注释。

protected override void OnModelCreating(ModelBuilder modelBuilder)

{

modelBuilder.Entity<Blog>() //选择实体类

.Property(b => b.Url) //选择属性

.IsRequired(); //添加属性指定

}

2. 使用数据注释配置模型

public class Blog {

public int BlogId { get; set; }

[Required]

public string Url { get; set; }

}

//常用注释

//[Key] 主键

//[Required] 必须值

// [MaxLength(500)] 最大长度


microsoft 待看


4. 创建数据库

创建数据库使用到的是迁移:

microsoft EF迁移

简单介绍一下 EF的迁移:

在开发的期间,数据模型有可能发生更改并与数据库不同,使用迁移进行同步:

比如你在一个实体类中添加了一个新的属性,这个属性在数据库并不存在,使用迁移,使得模型和数据库同步。

在定义了模型之后,在数据库实例中并不存在对应的数据库和表格,使用迁移进行数据库的创建。

在这里使用到上面添加的包"tools",在包管理器控制台中使用下面命令:

Add-Migration InitialCreate  //生成迁移文件,InitialCreate是这次迁移的命名,会在文件中体现出来,命名尽量靠近迁移目的。

Update-Database //执行最近的迁移,执行完毕就可以在数据库中查到对应的表格。

//如果项目中有多个上下文类 ,要在 上面两个命令后面加上 -Context ContextName 以指明对谁使用迁移

//上下文类 BlogiingContext,那 Add-Migration InitialCreate -Context BlogiingContext 指明对BlogiingContext创建迁移

Remove-Migration //回退未执行的迁移

Update-Database LastGoodMigration //回退已经执行的迁移


5.访问数据库的方法 

using (var db = new BloggingContext()) 当创建上下文且读取的时候就会自动访问数据库获取对象

{

// Create

Console.WriteLine("Inserting a new blog");

db.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });

db.SaveChanges();

// Read

Console.WriteLine("Querying for a blog");

var blog = db.Blogs .OrderBy(b => b.BlogId) .First();

// Update

Console.WriteLine("Updating the blog and adding a post");

blog.Url = "https://devblogs.microsoft.com/dotnet";

blog.Posts.Add( new Post { Title = "Hello World", Content = "I wrote an app using EF Core!" });

db.SaveChanges();

// Delete

Console.WriteLine("Delete the blog");

db.Remove(blog); db.SaveChanges();

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容