程序地带

.NET Core学习笔记(9)——Entity Framework Core之Code First


上篇我们介绍了怎么通过已有的SQLServer表来创建实体类,本篇我们改用Code First的方式,由C#代码书写的实体类来生成SQLServer表。并且通过简单的Console APP往SQLServer表写入数据。首先我们先创建3个空的Projects,其中EfCodeFirst是作为启动项的Console程序(.NET Core 3.1)。EfCodeFirst通过Add Project Reference引用DataAccess工程(.NET Standard 2.0)。DataAccess将会包含DbContext对象,作为数据库的实际访问接口。同时DataAccess还会Add Project Reference引用Entities工程(.NET Standard 2.0)。Entities工程顾名思义,所有SQLServer表的映射实体类会写到这里。



接着我们通过NuGet给各个Project添加EntityFrameworkCore的引用,其中DataAccess需要EntityFrameworkCore.Tools以及EntityFrameworkCore.SqlServer,启动项EfCodeFirst需要EntityFramework.Design。



同时还要把CodeFirst所需的代码给补上,在Entities工程中我们添加TodoItem类:


namespace Entities
{
public class TodoItem
{
public long Id { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
}
}

在DataAccess工程中我们添加TodoContext对象,TodoContext继承自DbContext,同时还引用TodoItem类。实际我们也正是通过TodoContext类来实现TodoItem对象在SQLServer中的增删查改。注意这里我们通过OnConfiguring方法来指定SQLServer的Connection String。


namespace DataAccess
{
public class TodoContext : DbContext
{
public DbSet<TodoItem> TodoItems { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(@"Data Source=(localdb)MSSQLLocalDB;Initial Catalog=CodeFirstDB;Integrated Security=True;");
}
}

 


接下来我们就要通过在Package Manager Console窗口通过Add-Migration命令来创建SQLServer表了。注意Default project要选择DataAccess,否则Migrations相关文件会生成到别的工程。



InitDatabase是我给Migrations脚本指定的名字,在DataAccess工程中,会加上时间前缀生成对应的Migrations类,以如下形式呈现:



此时仍没有创建SQLServer表,我们需要在Package Manager Console提示"Build succeeded."后。通过Update-Database命令来把修改应用到SQLServer中。



至此我们就可以使用TodoContext来访问SQLServer中的TodoItems表了,在EfCodeFirst工程的Main函数里添加如下代码,每次Main函数启动时查询TodoItems表的记录条数,然后新增一条记录。


static void Main(string[] args)
{
Console.WriteLine("Hello World!");
using (var dbContext = new TodoContext())
{
var count = dbContext.TodoItems.Count();
var item = new TodoItem { Name = $"test{++count}" };
dbContext.Add(item);
dbContext.SaveChanges();
}
}

GitHub:


https://github.com/manupstairs/EntityFrameworkCoreSamples/tree/main/CodeFirstSample


 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/manupstairs/p/14287411.html

随机推荐

Android10 wifi AP功能

wifiAP功能1.概述2.wifiAp功能在应用层开发3.配置信息系统时序图4.startTethering时序图1.概述随着网络的广泛应用,广大用户对网络使用的便利性有了更高的要求。...

binn_chern 阅读(102)

CSP 2020-12

CSP 2020-12

CSP2020-123带配额的文件系统题面链接题意思路源码3带配额的文件系统tag:复杂模拟结构体题面链接http://118.190.20.162/view.page?gpid=T121.题...

琅歌 阅读(312)

最好用的大学期末网课搜题公众号

前言很多学校,陆陆续续都期末考试拉,今天分享一个查询工具-『智能网课通』,支持多种网课,答案可以做到秒回。还可以使用语音查询,题库...

可乐python说 阅读(793)

高性能服务器模型分类

高性能服务器的几种模型概念: actor模型: 实体之经过消息通信,各自处理本身的数据,可以实现这并行。 这种方式,有点相似rpc...

尹平华 阅读(548)

vue Day01

###vuehttps://cn.vuejs.org/Vue(读音/vjuː/,类似于view)是一套用于构建用户界面的渐进式框架.MVVM:m:model数据v:view视图VM:vi...

m0_51253605 阅读(373)

数据结构课程设计(四):校园导游程序

问题描述:用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,...

小绵杨Yeanling 阅读(241)

Zookeeper 和 ETCD的对比

这篇文章分析的比较好了ApacheZooKeepervs.etcd3,我把主要的对比翻译一下。Zookeeper优点非阻塞的全量快照(用来实现最终一致性)有效的内存管理可靠...

houzhizhen 阅读(300)