Net Core使用EF之DB First

一.新建一个.net core的MVC项目

新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖


 二.使用Nuget添加EF的依赖

输入命令:  Install-Package Microsoft.EntityFrameworkCore.SqlServer

安装成功后就可以在依赖项中看到

注意执行命令的项目你可能需要选择一下

 三.如果是使用db first,需要根据数据库生成model,就还需要使用命令添加两个依赖

Install-Package Microsoft.EntityFrameworkCore.Tools(其实3.1要执行命令生成只下这一个就可以了)

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

安装成功后就可以在依赖项中看到

四.相关依赖添加成功后,就可以更具一个命令就可以从数据库生成model了  

命令:    Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

-OutputDir Models的意思是把生成的实体和上下文都输出到Models这个文件夹如果不需要这样直接输出到当前类库中不接即可

注意:有可能执行这个命令会报错:

 1:执行这一步的时候出现了点问题 ,因为系统是win7,powershell版本太低了,不支持这个命令,需要安装

3.0以上的powershell版本才行      

2: Could not load assembly 'DAL'. Ensure it is referenced by the startup project 'xxxx'.

是因为主项目没有添加到这个DAL层的引用,添加了就行了,所以估计执行这个命令会使用到启动项目的一些东西

3:Your startup project 'xxxxx' doesn't reference Microsoft.EntityFrameworkCore.Design.This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.

他是说你启动项目没有这个依赖,在启动项目里边执行一下这个两个命令就好了

Install-Package Microsoft.EntityFrameworkCore.Tools

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

好像执行执行那个.Tools也可以,我就奇怪了nuget执行的明明不是启动项目为什么启动项目中还要添加这个依赖呢,

只在启动项目添加这个依赖行不行呢

如果model已经生成过了,想全部覆盖的话,可以在后面加一个-force命令:

Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -force

更新某个表:后面加-tables 表名

 Scaffold-DbContext "Server=.;Database=Food;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -tables Article

但是更新某个表有坑啊,如果覆盖了,那个表不会生成导航属性,而且那个山下文对象也只有那个表的内容了....暂时没有找到更好的办法...

单独更新拷贝过来,或者全部更新,或者直接写手吧,比如添加了一个字段什么的

     

 添加成功后在models可以看到, 生成了上下文对象与和表对应的model

官方文档

https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/cli/powershell

然后就可以开始使用EF了

 
  1.  public IActionResult Index()
  2.         {
  3.  
  4.             FoodContext fc = new FoodContext();
  5.  
  6.             List<ProType> ptlist = fc.ProType.ToList();
  7.  
  8.             ViewBag.ptlist = ptlist;
  9.  
  10.             return View();
  11.         }

五.使用依赖注入来装载EF的上下文对象

 .net core中用了不少的依赖注入,官方文档中也推荐使用

1:删除方法     

 
  1.  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  2.         {
  3.             //#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.
  4.             optionsBuilder.UseSqlServer(@"Server=.;Database=Food;Trusted_Connection=True;");
  5.         }

2:添加方法 

 
  1.      public FoodContext(DbContextOptions<FoodContext> options)
  2.             : base(options)
  3.         {
  4.  
  5.         }

添加的是一个构造函数用于构造函数注入(这个方法在新版的时候会自动加入)

3:在startup.cs的ConfigureServices方法中添加依赖注入    

 
  1.   public void ConfigureServices(IServiceCollection services)
  2.         {
  3.             // Add framework services.
  4.             services.AddMvc();
  5.  
  6.             services.AddDbContext<FoodContext>(option => {
  7.                 option.UseSqlServer("Data Source =.; Initial Catalog = EFCore_dbfirst; User ID = sa; Password = sa.123");
  8.             });
  9.             
  10.         }

注:usersqlserver是一个扩展方法,需要添加ef core的引用using Microsoft.EntityFrameworkCore;       

  • 连接字符串写入配置文件

      http://www.tnblog.net/aojiancc2/article/details/1266  

4:使用的时候就不能直接去实例化了否则会报错找不到上下文对象

应该使用注入的方式去获取ef对象,例如构造函数注入

 
  1.   private CNBlog_ServerContext ef;
  2.         public ArticleDAL(CNBlog_ServerContext context) //通过依赖注入得到实例
  3.         {
  4.             ef = context;
  5.         }

 微软官方文档:

 https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在.NET Core 6.0中使用Entity Framework(EF)的Database First方式配置连接并进行实战是很简单的。 首先,确保你的项目中已经安装了相应的NuGet包,包括`Microsoft.EntityFrameworkCore.Tools`和`Microsoft.EntityFrameworkCore.SqlServer`(如果你使用SQL Server作为数据库)。 接下来,打开终端或命令提示符窗口,进入你的项目文件夹,并执行以下命令来生成EF的模型类: ``` dotnet ef dbcontext scaffold "YourConnectionString" Microsoft.EntityFrameworkCore.SqlServer -o Models ``` 在这个命令中,你需要将"YourConnectionString"替换为你的数据库连接字符串。该命令将自动生成EF的模型类,并将其放在`Models`文件夹中。 完成上述步骤后,你就可以在代码中使用这些生成的模型类来与数据库进行交互了。例如,你可以编写以下代码来获取数据库中的数据: ```csharp using System; using System.Linq; using Microsoft.EntityFrameworkCore; using YourProject.Models; // 替换为你生成的模型类所在的命名空间 namespace YourProject { class Program { static void Main(string[] args) { using (var context = new YourDbContext()) // 替换为你生成的DbContext类的名称 { var data = context.YourTableName.ToList(); // 替换为你数据库中的表名称 foreach (var item in data) { Console.WriteLine(item.PropertyName); // 替换为你表中的属性名称 } } } } } ``` 以上代码演示了如何通过使用生成的模型类和DbContext类来查询数据库中的数据。 这就是在.NET Core 6.0中使用EF的Database First方式配置连接并进行实战的简单过程。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值