EFCore 基于Code First开发的配置

news2024/10/7 6:46:04

EFCore版本:7.0.10

Visual Studio版本:2022

1、首先新建一个项目(无论是.net framework还是.net core都可以),在项目中添加EFCore的程序包:

2、新建一个文件夹Models,把表模型都放在这个文件夹里

3、新建表模型,这里我新建2张表:Post和Blog,以下是表的定义:

public class Blog
{
    public int BlogId { get; set; }
    [MaxLength(200)]
    public string Name { get; set; }   
    public virtual List<Post> Posts { get; set; }
}
public class Post
{
    public int PostId { get; set; }
    [MaxLength(100)]
    public string Title { get; set; }        
    public string Content { get; set; }

    public int BlogId { get; set; }
    public virtual Blog Blog { get; set; }
}

根据这个类创建出来的表中,EF会把BlogId和PostId作为表的主键,因为EF默认表的主键为Id或类名+Id。我们也可以用数据注释的方式显式为表指定主键,像下面这样:

[Key]
public int PostId { get; set; }

使用MaxLength可以为字段指定字符个数,如[MaxLength(100)]应用到数据库的字段定义就是nvarchar(100)。

这种定义字段的方式称为数据注释,需要引入命名空间:

using System.ComponentModel.DataAnnotations;

还有一种定义字段的方式是Fluent API,在继承自DbOontext类的OnModelCreating函数中定义字段,这种方式在这里就不做介绍了,想了解这种方式的同学可以自己查看EFCore的官方文档。

在这2个类的定义中,我们看到每个类的最后一行都使用了virtual关键字,这其实是定义外键的方式。Post表的BlogId是Blog表的外键。

4、接下来我们需要创建一个继承自DbContext的类,代码如下:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(数据库连接字符串);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>().ToTable("Blog");
        modelBuilder.Entity<Post>().ToTable("Post");
        base.OnModelCreating(modelBuilder);
    }

数据库的名称就是类名除去Context,这个数据库的名称就是Blogging。

用DbSet<T>定义的属性名就是数据库的表名,我们看到每个属性名的后面都加了一个s,这是EFCORE的默认的表名命名约定,如果你去掉后面的s,并注释OnModelCreating函数,然后用add-migration FirstMigration添加迁移的时候编译会失败,无法添加迁移,就是因为这个表名违反了EFCORE的默认命名约定。如果我们想自定义自己喜欢的表名,就按照OnModelCreating函数里的方法自定义表名。

5、添加迁移。在VS的工具栏上找到:视图=》其他窗口=》程序包管理控制台,在控制台输入以下命令:

add-migration firstmigration

这个命名不区分大小写。执行成功后系统会自动在项目的根目录下生成一个文件夹Migrations,这个文件夹里的文件记录每次迁移的内容,现在这个文件夹里应该以下有2个文件:

6、迁移到数据库。在程序包管理控制台输入命令:

update-database

这个命令把迁移的内容更新到数据库中。执行成功后,登录到数据库中就可以看到新创建的数据库和表。

关于这个命令还有一个用法,就是如果你只想更新某一个迁移到数据库,而不是把所有的迁移都更新到数据库(这个命令会把所有还未更新的迁移都更新到数据库),可以在这个命令的基础上加一个参数:

update-database -migration SecondMigration

执行这个命令可能会报一个错:证书链是由不受信任的颁发机构颁发的。这是因为你的系统的SSL证书不被数据库服务器信任,解决这个问题的方法是在数据库连接字符串上加上一个配置:

TrustServerCertificate=true;

至此Code First的配置已经完成了,关于更加复杂的配置请参考EFCORE 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java笔记:线程池

一. 正确使用ThreadPoolExecutor创建线程池 1.1、基础知识 Executors创建线程池便捷方法列表&#xff1a;下面三个是使用ThreadPoolExecutor的构造方法创建的 方法名功能newFixedThreadPool(int nThreads)创建固定大小的线程池newSingleThreadExecutor()创建只有一个线程的线…

三维模型3DTile格式轻量化压缩模型变形浅析

三维模型3DTile格式轻量化压缩模型变形浅析 在对三维模型进行轻量化压缩处理的过程中&#xff0c;常常会出现模型变形的现象。这种变形现象多数源于模型压缩过程中信息丢失或误差累积等因素。以下将对此现象进行详细分析。 首先&#xff0c;我们需要了解三维模型轻量化压缩的…

前端设计模式基础笔记

前端设计模式是指在前端开发中经常使用的一些解决问题的模式或思想。它们是经过实践证明的最佳实践&#xff0c;可以帮助我们更好地组织和管理我们的代码。 一、单例模式&#xff08;Singleton Pattern&#xff09; 单例模式是一种创建型模式&#xff0c;它保证一个类只有一个…

2023最新轻松升级、安装和试用Navicat Premium 16.2.10 教程详解

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的要素】,在【文本字符串】栏中…

HTTPS/HTTP2

HTTPS HTTPS(HyperText Transfer Protocol Secure)&#xff0c;译为&#xff1a;超文本传输安全协议 常称为HTTP over TLS、HTTP over SSL、HTTP Secure由网景公司于1994年首次提出 HTTPS的默认端口号443&#xff08;HTTP是80&#xff09; SSL/TLS HTTPS是在HTTP的基础上使…

长胜证券:xd在股票里是什么意思?

跟着互联网的发展&#xff0c;股票市场也变得更加开放和透明。不只一般投资者能够经过在线渠道参加股票买卖&#xff0c;而且各种股票术语也成为人们日常沟通的一部分。其间一个常见的术语是“xd”&#xff0c;这个词常常被投资者和股民们运用。那么&#xff0c;xd在股票里到底…

重装系统后原git项目报错

重装系统后使用sourcetree打开项目报错提示如下&#xff1a; 解决方案就是输入上图中给的提示:

浏览器缓存机制及其分类

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 强缓存&#xff08;Cache-Control 和 Expires&#xff09;⭐ 协商缓存&#xff08;ETag 和 Last-Modified&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几…

利用优化算法提高爬虫任务调度效率

在大规模数据采集的场景中&#xff0c;高效的任务调度是关键之一。通过利用优化算法&#xff0c;我们可以提高爬虫任务的调度效率&#xff0c;加快数据采集速度&#xff0c;并有效利用资源。本文将为您介绍如何利用优化算法来优化爬虫任务调度&#xff0c;实现高效的批量采集。…

题库管理系统开发流程

题库管理系统是用于管理和维护题目库的应用程序&#xff0c;通常用于教育、培训、考试和测评等领域。以下是一些典型的题库管理系统功能以及在开发时需要注意的问题&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢…

ERP已死,“中台”已凉,“低代码”称王,是真的吗?

企业数字化领域&#xff0c;最不缺的就是新概念&#xff0c;ERP、中台、低代码&#xff0c;一代代概念工具层出不穷。有的经过拍打站稳脚跟&#xff0c;有的则被后浪“拍死”在沙滩上。 当然了&#xff0c;我们先来说说ERP、中台、低代码到底是什么。 ERP是什么&#xff1f; …

大四上的相关

专业实习 Cisco 中兴实习&#xff1a;VLAN技术原理及应用 思科的简易配置 LoraWAN部分 LoRaWan实验&#xff0c;简易测量教室温度 NB-IoT部分&#xff08;复杂项目&#xff09; 物联网工程实践 云计算 安全及认证

智能防雷监测系统,智能防雷保护器综合方案

智能防雷是一种利用现代科技手段&#xff0c;实现对雷电活动的监测、预警、防护和评估的综合系统。智能防雷的作用是提高防雷设施的安全性和可靠性&#xff0c;减少雷电灾害的损失&#xff0c;提升防雷管理的效率和水平。 地凯科技智能防雷系统主要由以下几个部分组成&#xf…

强化学习-论文调研-泛化性能力度量

1.[ICML2019]Quantifying Generalization in Reinforcement Learning ​ 文章提出16000多个单智能体闯关游戏CoinRun&#xff0c;通过智能体在分割开的训练环境和测试环境上表现的性能作为RL泛化性的度量。具体而言作者通过”奔跑硬币泛化曲线“ &#xff08;CoinRun Gener…

基于SSM的会员管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Cocos独立游戏开发框架(十六):UI管理器

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。 UI管理器用于管理游戏中所有的UI界面&#xff0c;更加方便快捷地管理UI界面的创建、销毁以及层级管理。本文将深入探讨Cocos独立游戏开发框架中的UI管理器. 本文源码和源工…

获取1688同行还在看 API 返回值说明(调用演示,详细步骤)

接口名称&#xff1a;item_search_peerbuy 功能说明&#xff1a;此API用来获取看过此商品的同行还在看的其他商品列表。通过传入参数num_iid&#xff1a;商品ID和sid:1688店铺标识id(详情接口可获取)&#xff0c;获取到同行还在看的其他商品列表&#xff0c;响应参数包括商品i…

explain各字段的含义

“ MySQL 5.6.3以前只能EXPLAIN SELECT; 5.6.3以后就可以EXPLAIN SELECT,UPDATE,DELETE 有这样一张user表,300多万行记录,表结构及索引信息如下: 对于sql: SELECT * FROM user WHERE id > 20000 AND country > 1 AND grade IN ( 1, 4 ) AND city IN ( 1, 500, 1000, 1…

【LeetCode: 1462. 课程表 IV:拓扑排序+图+广度优先搜索】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…