EF在MVC中的简单使用

 HttpContext
 在ASP.NET Core中,HttpContext 是用于访问有关当前 HTTP 请求的信息的重要组件。它包含有关请求的上下文信息,例如请求头、请求体、响应等。
 你在上述代码中使用了 HttpContext 来获取用户的会话信息。
 使用HttpContext来获取当前用户的登录信息,目前的使用主要是获取用户的ID:
 例如:int? userId = HttpContext.Session.GetInt32("UserId");
 这里使用了 HttpContext.Session 来访问会话信息。在这个例子中,它试图从会话中获取键为 "UserId" 的值,并将其赋值给 userId 变量。
 if (HttpContext.Session.Keys.Contains("UserId"))
{
    // 获取 UserId 的逻辑
}
HttpContext.Session.Keys 检查是否存在 "UserId" 键
使用HttpContext一般需要在Startup.cs或者Program.cs中添加一下代码
services.AddSession();//在Program.cs中为Build.services.AddSession()
app.UseSession();

在MVC中使用EF目前先是在Models中创建一个上下文程序文件,文件中的类继承DbContext(一般在项目中加入EF的包就可以,本项目中使用的是Microsoft.EntityFrameworkCore),使用DbSet把各个
表添加进来,然后初始化 DbContext 的实例,具体代码如下:
//DbContext 是 Entity Framework 中的核心类,负责管理应用程序与数据库之间的连接、映射实体对象到数据库表、跟踪实体对象的状态变化等任务
public class DataContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public DbSet<Menu> Menus { get; set; }
        public DbSet<Role> Roles { get; set; }
        public DbSet<UserRole> UserRoles { get; set; }

        public DbSet<RoleMenu> RoleMenus { get; set; }

        /// <summary>
        /// 学生
        /// </summary>
        public DbSet<Student> Students { get; set; }

        public DataContext(DbContextOptions<DataContext> options) : base(options)
        {
        }
       //在这个构造函数中,DbContextOptions<DataContext> 参数是一个包含有关数据库连接和配置的选项对象。通过传递这个选项对象,你可以配置 DbContext 与特定数据库的连接和行为。
       //这个构造函数的作用有以下几点:
       //1、过构造函数的参数 options,你可以传递包含数据库连接字符串、数据库提供程序(例如,MySQL、SQL Server 等)以及其他配置信息的选项。
       //2、初始化基类: base(options) 调用了 DbContext 的基类构造函数,将传递进来的选项用于初始化基类。这是确保 DbContext 具有正确配置以与数据库通信的关键步骤。
    }
还应该对其进行配置,一般在Startup.cs或者Program.cs进行配置,表明使用的是什么数据库以及连接字符串,一般连接字符串会放在配置文件中,不同数据库连接字符串也稍有不同
具体代码及配置如下所示:
public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            //数据库EntityFrameworkCore注入
            services.AddDbContext<DataContext>(option =>
            option.UseMySql(Configuration.GetConnectionString("Default"),
                    new MySqlServerVersion(new Version(7, 0, 0))));
            services.AddHttpContextAccessor();
            services.AddSession();//配置session访问服务
        }
配置文件连接字符串配置如下:
 "ConnectionStrings": {
    "Default": "Server=localhost;Database=CS;User=root;Password=123456"
  },
  
 
目前的问题是,我想在MVC中使用EF框架把Models中所建立的模型,使之在MySql中自动生成表不需要自己在建立一遍,之前在控制台应用中实现了基于Code First模式的创建,但在MVC还没有实现
经过产找资料已经实现在MySql中自动生成表,所遇到的问题是我使用 Add-Migration InitialCreate命令时,无法将“Add-Migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,解决
办法是在项目中安装一个工具包(Microsoft.EntityFrameworkCore.Tools),就可以识别该命令,完成自动生成的功能。
我是新建的MVC项目,首先就安装了三个包分别为(Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Tools、Pomelo.EntityFrameworkCore.MySql),通过这三个包就可以基本实现
通过模型自动生成数据库中的表,这个过程中数据库名称可以是已有的也可使新建的(直接在连接字符串中的database中修改),之后控制台中执行命令就可以实现该功能。
具体过程如下
1.在Models中添加一个模型如Product
public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
2.创建一个继承DbContext的类如ApppDbContext
public class AppDbContext : DbContext
    {
        public DbSet<Product> Products { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySql("Server=localhost;Database=CS1;User=root;Password=123456", new MySqlServerVersion(new Version(8, 0, 22)));
        }
    }
3.执行命令
Add-Migration InitialCreate
Update-Database

以上过程虽然能够所需的功能(在MySql数据库中自动生成模型的表,所生成的表都会在模型名后加s),但在我要实际运行的时候有报错(比如查询的时候)
因此,通常的做法是把连接字符串放在配置文件中,在Models中上下文文件中进行初始化,在program中创建该服务,具体代码如下:
 public AppDbContext(DbContextOptions<AppDbContext> option) : base(option)
{
}
        
builder.Services.AddDbContext<AppDbContext>(option =>
option.UseMySql(builder.Configuration.GetConnectionString("Default"),
new MySqlServerVersion(new Version(7, 0, 0))));
 

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于EF+MVC+Bootstrap的通用管理系统。 Framework 业务无关的底层通用机制及功能 Model基类:提供数据传输和底层的最基本的基类及接口 DAL底层:基于EF code first,提供Repository泛型方法及写历史日志 Untility:通用函数库,基本都全了 Web:复写MVC基类,及通用MVC控件 通用模块Core 核心功能模块,包括缓存管理,配置管理,日志管理,服务管理...... 缓存模块:提供对分布式缓存的Provider扩展 配置模块:基于正则的配置管理及CURD机制 日志模块:基于Log4net扩展 服务模块:默认使用引用Bll,可扩张调用Wcf服务,且拦截服务 上传模块:通用upload handler,及缩略图生成方式(按需生成,即时生成,延迟生成) 管道模块:通用HttpModule,用于注入通用功能到各个应用及网站 应用模块三层架构 提供OA,CMS,CRM系统的原型及DAL,IBLL及BLL实现 Account:用户认证,可自己扩张到SSO单点登录 Account: 安全验证码实现 Account: 轻量级权限系统 OA:提供OA里人员,部门管理及分配的场景实例 CRM:客户管理系统原型 CMS:内容发布系统原型 数据层(DAL): 采用Code first POCO方式 提供实体设计:一对一,一对多,多对多,自引用的各种使用场景 业务逻辑层(BLL): 实现CURD方法 提供复杂查询场景 提供业务异常抛出 对后端异常进行拦截写日志 对写操作进行写历史,用于追踪 IBLL: 服务接口,可扩展用WCF发布BLL作为服务 前端框架及实现 MVC,Bootstrap.......... 基于Bootstrap:基于“Metronic Bootstrap Theme”模板 MVC 4.0:CURD操作基于MVC Model Binder Silverlight 5:OA里组织图OrgChart拖拽操作 封装Context:封装ConfigContext,CacheContext,UserContext,CookieContext.. 上传控件:Uploadify使用实例 Jquery:除Metronic模板在Assets文件夹,Content文件夹加入需要的Jquery插件 提供富文本编辑器,标签,JS曲线图等实例 一款采用C#开发的源码,功能完整,界面美观,欢迎大家下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值