.Net Core 3.1连接MySql数据库

1.使用Nuget安装Pomelo.EntityFrameworkCore.MySql

注意,使用MySql.Data.EntityFrameworkCore会报错System.TypeLoadException
  HResult=0x80131522
  Message=Method 'get_Info' in type 'MySql.Data.EntityFrameworkCore.Infraestructure.MySQLOptionsExtension' from assembly 'MySql.Data.EntityFrameworkCore,
 Version=xxxx Culture=neutral, PublicKeyToken=c5687fc88969c44d' does not have an implementation.
  Source=MySql.Data.EntityFrameworkCore

 

2.在appsettings.json中新增MySql数据库链接:

"ConnectionStrings": {   
    "MySqlContext": "Server=localhost;port=3306;Database=db;user=root;password=root;SslMode=None;CharSet=utf8;"
  }

地址如果写成:localhost:3306这种格式,会报错

3.新增继承DbContext的上下文类

//添加模型类
public class Movies
    {
        public int Id { get; set; }
        public string Title { get; set; }

        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }

    }
public class MoviesContext :DbContext
    {
        public MoviesContext(DbContextOptions<MoviesContext> options) : base(options)
        {

        }
        
        public DbSet<Movies> Movies { get; set; }
    }

4.修改StartUp.cs中的ConfigureServices方法,注册MySql服务

 services.AddDbContext<MoivesContext>(options =>        options.UseMySql(Configuration.GetConnectionString("MySqlContext")));    

5.在controller中使用

 public class MoviesController : Controller
    {
        private readonly MoviesContext _context;

        //注入MoviesContext
        public MoviesController(MoviesContext context)
        {
            _context = context;
        }
        
        //这样就可以使用了
        public async Task<IActionResult> Index()
        {
            return View(await _context.Movies.ToListAsync());
        }
}

 

注意:

1.如果使用添加基架的方式或者添加新的controller时,如果要使用已有的Context类,请一定要先注册服务,否则会报错:No parameterless constructor defined for type "xxx"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章