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.mzph.cn/news/142874.shtml

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

相关文章

流量分析(5.5信息安全铁人三项赛数据赛题解)

黑客通过外部的web服务器攻击到企业内部的系统中&#xff0c;并留下了web后门&#xff0c;通过外部服务器对内部进行了攻击。 目录 黑客攻击的第一个受害主机的网卡IP地址 黑客对URL的哪一个参数实施了SQL注入 第一个受害主机网站数据库的表前缀(加上下划线 例如abc_) 第一…

哔哩哔哩自动引流软件的运行分享,以及涉及到技术与核心代码分享

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 大家好&#xff0c;我是一名专注于自动引流软件研发的技术专家。今天&#xff0c;我将与大家分享自动引流软件涉及到的技术与核心代码&#xff0c;希望能为大家提供一些有价值的参…

【postgresql】查看数据中表的信息

切换到postgresql数据库&#xff0c;各种不适应吧。 有个需求需要查询数据表的各种信息。 下面我们一起学习吧。 ●PostgreSQL: Documentation PostgreSQL: Documentation ●pg_namespace 存储名字空间。名字空间是 SQL 模式下层的结构&#xff1a;每个名字空间有独立的关系…

国际阿里云:无法访问ECS实例中的服务的排查方法!!!

操作场景 无法访问ECS实例中的服务可能有以下原因&#xff1a; 可能原因 排查方案 ECS实例的安全组未开放相应端口 检查ECS实例安全组规则 ECS实例中&#xff0c;该服务未启动/开启或服务对应端口未被监听 检查服务状态及端口监听状态 ECS实例内防火墙设置错误 检查ECS…

玩转ChatGPT:ARIMA模型定制GPT-1.0

一、写在前面 好久不更新咯&#xff01; OpenAI又推出了GPT的一系列重大更新&#xff0c;其中GPTs深得我心啊。 GPTs允许用户创建自定义的ChatGPT版本&#xff0c;以满足自己各种特定需求。其核心理念在于&#xff0c;用户可以为不同的场景和任务创建定制化的ChatGPT。这意味…

【NodeJS】Nodejs安装及环境配置

下载安装包 网址&#xff1a;https://nodejs.org/en 安装程序 1.下载完成后&#xff0c;双击安装包&#xff0c;进行安装&#xff0c;一路默认配置 nxet 即可&#xff0c;安装路劲给默认在C盘&#xff0c;或者选择其他位置&#xff0c;当前教程默认C盘 2.下图根据本身的…

会议邀请 | 思腾合力邀您共赴第二十五届高交会(CHTF2023)

2023年11月15-19日&#xff0c;以“激发创新活力 提升发展质量”为主题的「第二十五届中国国际高新技术成果交易会&#xff08;CHTF2023&#xff09;」将在深圳会展中心&#xff08;福田&#xff09;和深圳国际会展中心&#xff08;宝安&#xff09;举办。思腾合力作为行业领先…

新版软考高项试题分析精选(三)

请点击↑关注、收藏&#xff0c;本博客免费为你获取精彩知识分享&#xff01;有惊喜哟&#xff01;&#xff01; 1、项目整体管理要综合考虑项目各个相关过程&#xff0c;围绕整体管理特点&#xff0c;以下说法中&#xff0c;&#xff08; &#xff09;是不正确的。 A.项目的…

java springboot2.7 JSR303与Hibernate进行Bean的数据校验

我们如果对数据能进行格式校验 做个安全检查就会容易很多 其实 各个系统中都必然后拥有数据校验&#xff0c;这也不是新东西 J2EE规范中JSR303就规范定义了一组有关数据校验的API 首先 我们在 pom.xml 中 注入依赖 <dependency><groupId>javax.validation</gr…

SpringEvent事件通知机制

“Spring Event” 是 Spring 框架通过事件驱动的编程模型来处理应用程序中的事件。开发者可以定义自己的事件&#xff0c;然后在应用程序中触发这些事件。Spring 框架提供了用于发布和监听事件的机制&#xff0c;以实现松散耦合的组件间通信。 有两个核心组件&#xff1a; 事…

PostGIS学习教程五:简单的SQL语句

SQL&#xff0c;或"Structured Query Language-结构化查询语言"&#xff0c;是对关系数据库进行查询数据和更新数据的一种方法。 当我们创建第一个数据库时&#xff0c;你已经看到了SQL&#xff1a; SELECT postgis_full_version();查看PostGIS的版本信息。 在前面的…

应届裁员,天胡开局——谈谈我的前端一年经历

应届裁员&#xff0c;天胡开局——谈谈我的前端一年经历 许久没有更新了&#xff0c;最近一个月都在忙&#xff0c;没错&#xff0c;正如题目所说&#xff0c;裁员然后找工作… 这周刚重新上班&#xff0c;工作第二天&#xff0c;感慨良多&#xff0c;记录些什么吧。 去年十…

基于springboot实现学生选课平台管理系统项目【项目源码】计算机毕业设计

基于springboot实现学生选课平台管理系统演示 系统开发平台 在该地方废物回收机构管理系统中&#xff0c;Eclipse能给用户提供更多的方便&#xff0c;其特点一是方便学习&#xff0c;方便快捷&#xff1b;二是有非常大的信息储存量&#xff0c;主要功能是用在对数据库中查询和…

Outlook如何恢复已删除邮件

Outlook如何恢复已删除邮件 操作指引&#xff1a; Outlook客户端恢复最近7天删除的邮件&#xff1a; Outlook客户端要求最新版本&#xff0c;如没有如下选项&#xff0c;建议联机更新windows update 网页邮箱恢复最近7天删除的邮件&#xff1a;

MySQL 社区开源备份工具 Xtrabackup 详解

文章目录 前言1. Xtrabackup 介绍1.1 物理备份与逻辑备份区别1.2 Xtrabackup 系列版本 2. Xtrabackup 部署2.1 下载安装包2.2 二进制部署2.3 程序文件介绍2.4 备份需要的权限 3. Xtrabackup 使用场景3.1 本地全量备份3.2 本地压缩备份3.3 全量流式备份3.3.1 备份到远程主机3.3.…

0基础学习PyFlink——水位线(watermark)触发计算

在《0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows)》和《0基础学习PyFlink——个数滑动窗口&#xff08;Sliding Count Windows&#xff09;》中&#xff0c;我们发现如果窗口中元素个数没有把窗口填满&#xff0c;则不会触发计算。 为了解决长期不计算的问题&a…

Interactive Analysis of CNN Robustness

Interactive Analysis of CNN Robustness----《CNN鲁棒性的交互分析》 摘要 虽然卷积神经网络&#xff08;CNN&#xff09;作为图像相关任务的最先进模型被广泛采用&#xff0c;但它们的预测往往对小的输入扰动高度敏感&#xff0c;而人类视觉对此具有鲁棒性。本文介绍了 Pert…

微信小程序display常用属性和子元素排列方式介绍

wxss中display常用显示属性与css一致&#xff0c;介绍如下&#xff1a; 针对元素本身显示的属性&#xff1a; displayblock&#xff0c;元素显示换行displayinline&#xff0c;元素显示换行&#xff0c;但不可设置固定的宽度和高度&#xff0c;也不可设置上下方向的margin和p…

Python | 机器学习之聚类算法

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《人工智能奇遇记》&#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 目录结构 1. 机器学习之聚类算法概念 1.1 机器学习 1.2 聚类算法 2. 聚类算法 2.1 实验目的…

Riskified: 2023年电商政策滥用问题恶化,正严重挑战商家盈利底线

2023年11月14日&#xff0c;中国上海 —— 近日&#xff0c;由全球领先的电子商务欺诈和风险智能解决方案提供商 Riskified 发布的《政策滥用及其对商家的影响&#xff1a;2023年全球参考基准》报告显示&#xff0c;政策滥用问题正进一步恶化&#xff0c;超过九成电商商家正在承…