C#中.NET Framework 4.8控制台应用通过EF访问已建数据库

目录

一、创建.NET Framework 4.8控制台应用

二、建立数据库

1. 在SSMS中建立数据库Blogging

2.在VS上新建数据库连接

三、安装EF程序包

四、自动生成EF模型和上下文

1.Blog.cs类的模型

2.Post.cs类的模型

3.BloggingContext.cs数据库上下文

五、编写应用程序吧


        我们都知道.NET Framework最后一个更新版本是4.8.1,而曾经支持.NET Framework的EF版本却一直更新到现在仍然在不断创新。当前主流的VS2022仍然支持.NET Framework 4.8,在.NET Framework 4.8下使用EF访问数据库,不经过一番额外的操作,想直接使用VS2022的默认安装,是不可能行得通的。幸好VS2022没有关闭在.NET Framework 4.8下使用EF访问数据库的大门。作者经过学习、整理成本文发布出来提供给有需要的人。

        本文的核心内容是:在VS2022中给.NET Framework 4.8找到并安装恰当的、支持的EF版本。只有合适的EF版本才能支持.NET Framework 4.8通过EF访问数据库。

一、创建.NET Framework 4.8控制台应用

         如何创建,此处略去。

二、建立数据库

1. 在SSMS中建立数据库Blogging

         新建数据库,新建查询,粘贴如下数据库源码,执行。

CREATE DATABASE [Blogging];
GOUSE [Blogging];
GOCREATE TABLE [Blog] ([BlogId] int NOT NULL IDENTITY,[Url] nvarchar(max) NOT NULL,CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId])
);
GOCREATE TABLE [Post] ([PostId] int NOT NULL IDENTITY,[BlogId] int NOT NULL,[Content] nvarchar(max),[Title] nvarchar(max),CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]),CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE
);
GOINSERT INTO [Blog] (Url) VALUES
('http://blogs.msdn.com/dotnet'),
('http://blogs.msdn.com/webdev'),
('http://blogs.msdn.com/visualstudio')
GO

2.在VS上新建数据库连接

         在上述新建项目中,新建数据库连接,连接数据库Blogging。如何建立此连接,此处略去。

Data Source=DESKTOP-3LV13FS;Initial Catalog=Blogging;Integrated Security=True

三、安装EF程序包

         找到适合.NET Framework 4.8版本的程序包,并安装,是本文方法得以成立关键点。经过作者一番测试和查阅资料,最适合的EF版本是 3.1.32,比这再高的版本都不支持.NET Framework了。应该安装的程序包:

  • NuGet Gallery | Microsoft.EntityFrameworkCore 3.1.32

        NuGet\Install-Package Microsoft.EntityFrameworkCore -Version 3.1.32

  •   NuGet Gallery | Microsoft.EntityFrameworkCore.SqlServer 3.1.32

        NuGet\Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 3.1.32

  •  NuGet Gallery | Microsoft.EntityFrameworkCore.Design 3.1.32

        NuGet\Install-Package Microsoft.EntityFrameworkCore.Design -Version 3.1.32

  • NuGet Gallery | Microsoft.EntityFrameworkCore.Tools 3.1.32

        NuGet\Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.1.32

         安装方法:VS2022上述项目页窗体→工具→NuGet包管理器→程序包管理器控制台→把上面蓝色的文字复制粘贴到控制台的PM>后面,回车,等待。观察右侧资源管理器,增加了一片片的引用。

         安装成功后,程序包管理器控制台没有红色警告提示信息,并有提示安装成功。也可以检查App.config查看是否安装成功。

//App.config
<?xml version="1.0" encoding="utf-8"?>
<configuration><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup><runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><dependentAssembly><assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-3.1.32.0" newVersion="3.1.32.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Microsoft.Extensions.Configuration.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-3.1.32.0" newVersion="3.1.32.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-3.1.32.0" newVersion="3.1.32.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Microsoft.Extensions.Caching.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-3.1.32.0" newVersion="3.1.32.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Microsoft.Extensions.Options" publicKeyToken="adb9793829ddae60" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-3.1.32.0" newVersion="3.1.32.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-3.1.32.0" newVersion="3.1.32.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" /></dependentAssembly><dependentAssembly><assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-3.1.32.0" newVersion="3.1.32.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /><bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" /></dependentAssembly></assemblyBinding></runtime>
</configuration>

四、自动生成EF模型和上下文

        用于访问已有数据库的EF模型和上下文是可以通过编程而自动生成的。

PM> Scaffold-DbContext "Server=DESKTOP-3LV13FS;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer
Build started...
Build succeeded.
PM> 

        右侧资源管理器自动生成与映射到了数据库的Blog.cs类的模型、Post.cs类的模型(数据库有几个列,就自动生成几个类的模型),和BloggingContext.cs数据库上下文。

1.Blog.cs类的模型

//Blog EF模型
using System;
using System.Collections.Generic;// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
// If you have enabled NRTs for your project, then un-comment the following line:
// #nullable disablenamespace _10_8
{public partial class Blog{public Blog(){Post = new HashSet<Post>();}public int BlogId { get; set; }public string Url { get; set; }public virtual ICollection<Post> Post { get; set; }}
}

2.Post.cs类的模型

//Post EF模型
using System;
using System.Collections.Generic;// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
// If you have enabled NRTs for your project, then un-comment the following line:
// #nullable disablenamespace _10_8
{public partial class Post{public int PostId { get; set; }public int BlogId { get; set; }public string Content { get; set; }public string Title { get; set; }public virtual Blog Blog { get; set; }}
}

3.BloggingContext.cs数据库上下文

//DbContext类的上下文
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;// Code scaffolded by EF Core assumes nullable reference types (NRTs) are not used or disabled.
// If you have enabled NRTs for your project, then un-comment the following line:
// #nullable disablenamespace _10_8
{public partial class BloggingContext : DbContext{public BloggingContext(){}public BloggingContext(DbContextOptions<BloggingContext> options): base(options){}public virtual DbSet<Blog> Blog { get; set; }public virtual DbSet<Post> Post { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){if (!optionsBuilder.IsConfigured){
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.optionsBuilder.UseSqlServer("Server=DESKTOP-3LV13FS;Database=Blogging;Trusted_Connection=True;");}}protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity<Blog>(entity =>{entity.Property(e => e.Url).IsRequired();});modelBuilder.Entity<Post>(entity =>{entity.HasOne(d => d.Blog).WithMany(p => p.Post).HasForeignKey(d => d.BlogId);});OnModelCreatingPartial(modelBuilder);}partial void OnModelCreatingPartial(ModelBuilder modelBuilder);}
}

五、编写应用程序吧

        你想让这段程序干什么?现在就开始编写属于你的应用吧:通过应用程序,给Blog里增加一个新的网址,并输出到控制台。

//.NET Framework4.8下通过EF给已有数据库增加一条记录
//.NET Framework4.8下通过EF给已有数据库增加一条记录
using System;
using static System.Net.WebRequestMethods;namespace _10_8
{internal class Program{static void Main(string[] args){using (var db = new BloggingContext()){db.Blog.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });var count = db.SaveChanges();Console.WriteLine("{0} records saved to database", count);Console.WriteLine();Console.WriteLine("All blogs in database:");foreach (var blog in db.Blog){Console.WriteLine(" - {0}", blog.Url);}}}}
}   //运行结果:
/*
1 records saved to databaseAll blogs in database:-http://blogs.msdn.com/dotnet-http://blogs.msdn.com/webdev-http://blogs.msdn.com/visualstudio-http://blogs.msdn.com/adonet
请按任意键继续. . .*/

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCNA课程实验-13-PPPoE

目录 实验条件网络拓朴需求 配置实现基础配置模拟运营商ISP配置ISP的DNS配置出口路由器OR基础配置PC1基础配置 出口路由器OR配置PPPOE拨号创建NAT(PAT端口复用) PC1测试结果 实验条件 网络拓朴 需求 OR使用PPPoE的方式向ISP发送拨号的用户名和密码&#xff0c;用户名&#xf…

java入门,从CK导一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql&#xff0c;数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库&#xff0c;第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份&#xff0c;或者将需要导出的数据建一张新的表了…

从0开始python学习-32.pytest.mark()

目录 1. 用户自定义标记 1.1 注册标记​编辑 1.2 给测试用例打标记​编辑 1.3 运行标记的测试用例 1.4 运行多个标记的测试用例 1.5 运行指定标记以外的所有测试用例 2. 内置标签 2.1 skip &#xff1a;无条件跳过&#xff08;可使用在方法&#xff0c;类&#xff0c;模…

HashMap之扩容原理

HashMap 数据结构为 数组链表&#xff08;JDk1.7&#xff09;&#xff0c;JDK1.8中增加了红黑树&#xff0c;其中&#xff1a;链表的节点存储的是一个 Entry 对象&#xff0c;每个Entry 对象存储四个属性&#xff08;hash&#xff0c;key&#xff0c;value&#xff0c;next&…

uniapp开发ios上线(在win环境下使用三方)

苹果 1、win环境下无法使用苹果os编译器所以使用第三方上传工具&#xff0c;以下示例为 初雪云 &#xff08;单次收费&#xff0c;一元一次&#xff09; 初雪云&#xff08;注册p12证书&#xff09;&#xff1a;https://www.chuxueyun.com/#/pages/AppleCertificate 苹果开发者…

Linux 之 MakeFile

MakeFile 前言MakeFile基本介绍MakeFile介绍MakeFile文件命名Makefile编写规则MakeFile的执行步骤 MakeFilemakefile组成元素makefile显示规则makefile隐晦规则伪目标(标签与文件冲突问题) makefile变量定义makefile中的运算符和特殊变量 makefile文件指示makefile注释 makefil…

基于SSM的药店药品销售系统

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

23款奔驰E300L升级几何多光束大灯 自适应远近功能

奔驰新款E300L升级几何多光束大灯&#xff0c;单侧的LED头灯分别由84颗独立的LED光源组成&#xff0c;与风挡玻璃上的立体摄像机配合&#xff0c;每秒钟可对路况进行100次扫描&#xff0c;针对不同的路况和驾驶状态&#xff0c;智能调整84个独立光源 几何多光束大灯每侧大灯都拥…

HPC 工作负载管理 —— IBM Spectrum LSF Suite

全面的工作负载管理解决方案&#xff0c;通过增强用户和管理员体验以及实现规模性能来简化 HPC。 IBM Spectrum LSF Suites 是面向分布式高性能计算 (HPC) 的工作负载管理平台和作业调度程序。基于 Terraform 的自动化现已可用&#xff0c;该功能可在 IBM Cloud 上为基于 IBM …

Niushop单商户及多商户v5商城系统第三方商业插件cps联盟视频购物及多包装库存转换的安装

一、后端安装 把video文件夹直接上传到addon目录下即可登录后台&#xff0c;设置->系统维护->插件管理->未安装插件&#xff0c;找到插件直接安装即可 3.在营销->营销中心->营销活动&#xff0c;找到视频列表这个插件&#xff0c;点击进去配置视频即可 4.装…

rocksdb中测试工具Benchmark.sh用法(基准、性能测试)

1.首先要安装db_bench工具&#xff0c;这个工具在成功安装rocksdb之后就自动存在了&#xff0c;主要是在使用make命令之后就成功安装了&#xff0c;详情请见我之前的文章 2.确保成功安装db_bench之后&#xff0c;找到安装的rocksdb目录下面的tools文件夹&#xff0c;查看里面是…

【机器学习基础】一元线性回归(适合初学者的保姆级文章)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…