efcore开发模式之codefirst

ndolls ndolls     2023-04-22     211

关键词:

  Code First顾名思义,代码为先。首先编写完相关的实体类DbContext派生类,然后通过映射关系自动在数据库中完成数据库表的创建。

  本例中创建一个班级和学生的管理,主要有班级类MyClass和学生类Student。其中班级类MyClass中可包含多名学生Student,两者之间是一对多的引用关系。

一、环境准备

1.开发环境:.NET Core 3.1

2.IDE工具:Visual Studio 2019

3.数据库:SQL Server 2012

二、添加包引用

需要以下包的引用:

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Design

可通过dotnet cli命令行或VS的nuget包管理器实现相关包的添加。此处以dotnet cli命令行添加Design包为例。在项目根目录打开命令行,执行dotnet add package 要引用的包即可。

技术图片

三、编程程序代码

1.实体类代码

技术图片

 

 2.DbContext派生类代码

 技术图片

 一、创建迁移并更新数据库

1.通过命令行方式,在项目根目录执行命令:dotnet ef migrations add Test,创建名为Test的迁移任务;

  命令执行成功后,在项目中会自动产生一个Migrations文件夹,其中自动生成的CSharp代码文件就是用于更新数据库的。

技术图片

 

 2.继续执行命令:dotnet ef database update,根据项目中的实体映射关系,更新数据库(包括表结构、表直接的关系)。

技术图片 

【注】一个项目中如果有多个DbContext,迁移会报“build failed”错误。

【注】在开发过程中,如果实体模型类又发生了变动(如增加字段、修改字段、删除字段等),可以重新创建一个迁移,并执行迁移即可。

.net下极限生产力之efcore分表分库全自动化迁移codefirst

.Net下极限生产力之分表分库全自动化MigrationsCode-First##介绍本文ShardinfCore版本x.6.x.x+本期主角:-[`ShardingCore`](https://github.com/dotnetcore/sharding-core)一款ef-cor 查看详情

ef中三大开发模式之dbfirst,modelfirst,codefirst以及在productionenvironment中的抉择

一:ef中的三种开发方式1.dbfirst。。。db放在第一位,在我们开发之前必须要有完整的database,实际开发中用到最多的。。。<1>DBset集合的单复数。。。db=>model2.modelfirst。。。根据model生成数据库,和我们的sqlserver的可视化... 查看详情

8天掌握ef的codefirst开发系列之2简单的crud操作

本文出自8天掌握EF的CodeFirst开发系列,经过自己的实践整理出来。本篇目录创建控制台项目根据.Net中的类来创建数据库简单的CRUD操作数据库模式更改介绍本章小结本人的实验环境是VS2012,windows7,MSSQLServer2008R2。创建控制台项目... 查看详情

第十三节:ef的三种模式之来自数据库的codefirst模式

一.简介  【来自数据库的CodeFirst模式】实质上并不是CodeFirst模式,而是DBFirst模式的轻量级版本,在该模式中取消了edmx模型和T4模板,直接生成了EF上下文和相应的类,该模式出现在VS2015版本以后。  该模式也是适用于数... 查看详情

codefirst开发方式

CodeFirst又称代码优先,EF提供类型结构生成SQL并创建数据库中的表student类publicclassstudent:DbContext注:DbContext表示一个工作单元和存储库的组合模式,可以用来从数据库查询和组一起变化。{publicstudent(){Database.SetInitializer(newMigrateDatabas... 查看详情

微软跨平台orm框架之efcore(代码片段)

...6.X版本,更加轻量级。EFCore目前已经更新到2.x。接下来用CodeFirst的方式来使用EFCore.1.创建控制台程序 2.引入EFCore的Nuget包和Sqlserver的扩展(因为我这里用的Sqlserver数据库,若是别的数据库如Mysql引入相应的包即可)。  ... 查看详情

efcore(codefirst)通过自定义migrationhistory实现多租户使用同一数据库时更新数据库结构(代码片段)

...,那更加友好。 实现的思路其实我们都知道,EFcore(codefirst)会在数据库中生成唯一一个__EFMigrationHistory表,数据库的版本记录在这里。在我们文章的场景下,由于有多个租户同时使用,同一个表结构(Products)会出现多次,那么... 查看详情

efcore中通过fluentapi配置多对多关系(代码片段)

...查阅:https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/。EFCore支持CodeFirst模式生成数据库。这里以权限管理中的用户-角色-菜单的关系为例,演示一下EFCore中如何通过手动编写FluentAPI来配置多对多的关系。测试环境:VS2022/.NET6.0/EFCor 查看详情

efcore中通过fluentapi配置多对多关系(代码片段)

...查阅:https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/。EFCore支持CodeFirst模式生成数据库。这里以权限管理中的用户-角色-菜单的关系为例,演示一下EFCore中如何通过手动编写FluentAPI来配置多对多的关系。测试环境:VS2022/.NET6.0/EFCor 查看详情

微软跨平台orm框架之efcore—约定与属性映射(代码片段)

EFCore中的约定简单来说就是规则,CodeFirst基于模型的约定来映射表结构。除此之外还有FluentAPI、DataAnnotations(数据注释) 可以帮助我们进一步配置模型。按照这三者的优先级高低排序分别是:FluentAPI、DataAnnotations(数据注释... 查看详情

ef实体框架之codefirst六

上午的时候把复杂类型学习了一下,想着趁着周六日把CodeFirst学习完,所以下午还是把CodeFirst中的关系学习下。在数据库中最重要的恐怕就是E-R图了,E-R体现了表与表直接的关系。使用CodeFirst也需要把这种表与表直接的关系映射... 查看详情

ef实体框架之codefirst八

前面七篇基本把CodeFirst学习了一下,不过codefirst中会出现一个问题,就是数据迁移的问题。一、数据准备还是在前面的demo上修改,这次使用Province和City类。publicclassProvince{[Key]publicstringProvinceId{get;set;}publicstringProvinceName{get;set;}publ... 查看详情

efcore中通过fluentapi配置多对多关系(代码片段)

...查阅:https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/。EFCore支持CodeFirst模式生成数据库。这里以权限管理中的用户-角色-菜单的关系为例,演示一下EFCore中如何通过手动编写FluentAPI来配置多对多的关系。测试环境:VS2022/.NET6.0/EFCore6.0假... 查看详情

ef实体框架之codefirst七

前面的6篇博客基本把CodeFirst学习的差不多了,今天这篇学习下codefirst中的并发控制和事务,基本也快学完了,顶多就差数据迁移。在数据库中也是有锁和事务的概念,在C#中也是存在,当然codefirst也是必要要有的。对于什么是并... 查看详情

c#+entityframework编程方式详细之codefirst数据迁移

...的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式CodeFirst,ModelFirst以及DtatabaseFirst等编程方式,其中ModelFirst以及DtatabaseFirst中,如果实体类(ModelFirst)或者数据库(DtatabaseFirst)变化了,那么就需要数据库(ModelFirst)或者实体类(D... 查看详情

ef应用一:codefirst模式

...位于System.Data.Entity.dll和System.Data.EntityFramework.dll中。支持CodeFirst的位于EntityFramework.dll中。通常使用NuGetPackageManager来添加这些程序集。如果没有数据库:1、先写代码,自动创建数据库。2、如果代码有变化,自动删除数据库重建,... 查看详情

efcore报错:valuecannotbenull.parametername:frameworkname(代码片段)

今天在EFcore2.2中使用codefirst保存数据时遇到一个错误:Valuecannotbenull.Parametername:frameworkName   atMicrosoft.EntityFrameworkCore.Metadata.Internal.ClrCollectionAccessorFactory.Create(INavigationnavigation)  查看详情

efcore报错:valuecannotbenull.parametername:frameworkname(代码片段)

今天在EFcore2.2中使用codefirst保存数据时遇到一个错误:Valuecannotbenull.Parametername:frameworkName   atMicrosoft.EntityFrameworkCore.Metadata.Internal.ClrCollectionAccessorFactory.Create(INavigationnavigation)  查看详情