NetCore|3104—EF Code记录

一、基本 1—建立数据库上下文和表实体
使用nuget引入Microsoft.EntityframeworkCore.sqlserver和Microsoft.Entityframeworkcore.tools组件。

Scaffold-DbContext -Force “Server=服务器名; Database=数据库名; uid=账户; Password=密码; ” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/DataModels --Models/DataModels为实体和上下文存储位置

2—更新ef ORM实体报错
NetCore|3104—EF Code记录
文章图片

处理办法:解决方案中包含xunit项目(其中引用了DbContext),在解决方案中删除xunit项目,后Scaffold-Dbcontext成功。
3—Dapper执行原生SQL语句
需要引入nuget包。包括:DapperExtensions。现版本1.5.0
using Dapper; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; using Microsoft.Data.SqlClient; using (DbConnection conn = this._db.Database.GetDbConnection()) { await conn.OpenAsync(); string sql = "SELECT * from v_role_business WHERE RoleName=@rolename"; List getColl = null; SqlParameter[] prams = new SqlParameter[] { new SqlParameter("@rolename",roleName) }; //无参数就正常,有参数报错 //var lst= conn.Query(sql,prams); //不会报Invalid type owner for dynamicMethod var lst=this._db.Set().FromSqlRaw(sql,prams); if (lst != null) { getColl = lst.ToList(); result.Message = "Data-" + getColl.Count; }result.Success = true; result.Entity = getColl; awaitconn.CloseAsync(); }

注意-1:如果查询返回的类型为自定义viewModel类型,则set<>().FromSqlRaw()会报错;使用第一种语句形式则正常。
三、手动建立DbContext 在startup.cs中的ConfigureServices设置好addDbcontext的注入后,在Controller中会自动注入Dbcontext上下文。
【NetCore|3104—EF Code记录】实际开发中,在BLL、DAL中则没有自动注入功能,这时需要手动建立数据库上下文。
DbContextOptions dbContextOption = new DbContextOptions(); DbContextOptionsBuilder dbContextOptionBuilder = new DbContextOptionsBuilder(dbContextOption); BudgetBluePrintContext _dbContext = new BudgetBluePrintContext(dbContextOptionBuilder.UseSqlServer(<数据库连接字符串>).Options);

这样生成的数据库上下文就可以随意使用了。



    推荐阅读