tnblog
首页

Net Core使用EF之DB First

97人阅读 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}}
断剑重铸之日,骑士归来之时
博主搜索
文章类别
最新文章
最新评价
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}