一、基本 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实体报错
文章图片
处理办法:解决方案中包含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);
这样生成的数据库上下文就可以随意使用了。
推荐阅读
- #yyds干货盘点# C#+Access+asp.net教学计划管理系统
- poj1850 Code
- c#|计算机毕业设计net智慧社区管理平台
- web|用asp.net基于C#编写简单登录注册界面(访问数据库)
- web|如何用vs新建Asp.net项目(Web页面)
- 如何解决 ASP.NET Core 中的依赖问题
- 系统开发|C#-学生公寓管理系统的实现
- 微信小程序|微信小程序基础学习(WXML)
- #|Mendix架构综述