tnblog
首页

Net Core使用EF之DB First

55人阅读 2019/1/30 20:22 评论:0 收藏
分类: .NET Core


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


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



 二.使用Nuget添加EF的依赖


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

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

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


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


Install-Package Microsoft.EntityFrameworkCore.Tools

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design


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



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

 

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

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

.0以上的powershell版本才行         

     

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


然后就可以开始使用EF了

 public IActionResult Index()
        {
 
            FoodContext fc = new FoodContext();
 
            List<ProType> ptlist = fc.ProType.ToList();
 
            ViewBag.ptlist = ptlist;
 
            return View();
        }


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

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

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



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


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


1:删除方法     

 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //#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=.;Database=Food;Trusted_Connection=True;");
        }


2:添加方法 

     public FoodContext(DbContextOptions<FoodContext> options)
            : base(options)
        {
 
        }

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



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

  public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
 
            services.AddDbContext<FoodContext>(option => {
                option.UseSqlServer("Data Source =.; Initial Catalog = EFCore_dbfirst; User ID = sa; Password = sa.123");
            });
            
        }

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


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

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

  private CNBlog_ServerContext ef;

        public ArticleDAL(CNBlog_ServerContext context) //通过依赖注入得到实例
        {
            ef = context;
        }




 微软官方文档:

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


请先登录

{{item.title}}

{{item.content}}
不能简单的解决问题,那是设计与做法有问题
博主搜索
文章类别
CSS 5篇
云服务 2篇
Git 4篇
.NET 29篇
Android 0篇
软件架构 4篇
.NET Core 15篇
.NET MVC 3篇
英语 3篇
随笔 3篇
Bootstrap 1篇
Redis 12篇
编辑器 2篇
Js相关 6篇
Layui 2篇
Oracle 7篇
Python 2篇
数据库 2篇
EF 2篇
微信 2篇
前端 1篇
消息队列 1篇
最新文章
为什么要使用webapi而不直接使用controller
net core发布到IIS常见错误
net core依赖注入
NET CORE配置EF连接字符串
Net Core使用依赖注入来装载EF的上下文对象
下载net core
Sqlerver添加用户与授权
net core中使用url编码与解码操作
net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified
.net core使用response
ef6动态添加条件
最新评价
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}