3104—EF Code记录

6 篇文章 0 订阅
3 篇文章 0 订阅

一、基本

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

Scaffold-DbContext -Force “Server=服务器名;Database=数据库名;uid=账户;Password=密码;” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/DataModels
--Models/DataModels为实体和上下文存储位置
--   -NonePluralize 选项:保留数据库表原始名称,不做结尾s处理

      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<VRoleBusiness> getColl = null;

                SqlParameter[] prams = new SqlParameter[]
                    {
                        new SqlParameter("@rolename",roleName)
                    };
                //无参数就正常,有参数报错
                //var lst= conn.Query<VRoleBusiness>(sql,prams);
                //不会报Invalid type owner for dynamicMethod
                var lst=this._db.Set<VRoleBusiness>().FromSqlRaw(sql,prams);
                if (lst != null)
                {
                    getColl = lst.ToList();
                    result.Message = "Data-" + getColl.Count;
                }

                result.Success = true;
                result.Entity = getColl;
                await    conn.CloseAsync();
}

     注意-1:如果查询返回的类型为自定义viewModel类型,则set<>().FromSqlRaw()会报错;使用第一种语句形式则正常。

三、手动建立DbContext

    在startup.cs中的ConfigureServices设置好addDbcontext的注入后,在Controller中会自动注入Dbcontext上下文。

    实际开发中,在BLL、DAL中则没有自动注入功能,这时需要手动建立数据库上下文。    

DbContextOptions<BudgetBluePrintContext> dbContextOption = new DbContextOptions<BudgetBluePrintContext>();
                            DbContextOptionsBuilder<BudgetBluePrintContext> dbContextOptionBuilder = new DbContextOptionsBuilder<BudgetBluePrintContext>(dbContextOption);
                            BudgetBluePrintContext _dbContext = new BudgetBluePrintContext(dbContextOptionBuilder.UseSqlServer(<数据库连接字符串>).Options);

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值