4.添加对efcore的支持 ,并使用mysql数据库。

1.添加并加入

在project.json中添加

1
2
3
4
5
6
7
8
9
10
11
12
"tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },
 
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0"
    },
    "Pomelo.EntityFrameworkCore.MySql": "1.0.1",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  },

  在 tools中加入

1
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"<br><br>在dependencies中加入
1
2
"Pomelo.EntityFrameworkCore.MySql": "1.0.1",
  "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"<br>在Startup.cs中加入
1
2
3
4
5
6
7
8
9
public void ConfigureServices(IServiceCollection services)
      {
          // Add framework services.
          services.AddApplicationInsightsTelemetry(Configuration);
 
          services.AddDbContext<这里填写你的DbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnectionString")));
 
          services.AddMvc();
      }

                                                                                                   下面这个地方可以直接填写你的数据库连接字符串。//比如 "Server=localhost;database=MySqlDemo;uid=root;pwd=123456;"

1
services.AddDbContext<这里填写你的DbContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnectionString")));
1
这里的Configuration读取的是appsettings.json 。<br>所以你要在appsetting.json 添加一个
"ConnectionStrings": {
    "DefaultConnectionString": "Server=localhost;database=MySqlDemo;uid=Quan;pwd=123456;"
  },

然后他就可以读到这个字符串了。

当然你的DbContext一定要有构造方法。

 public class MySqlDemoContext : DbContext
    {
        public MySqlDemoContext(DbContextOptions<MySqlDemoContext> options): base(options)
        {
        }
}
1
这样你的mysql数据库就能练得上了,可以当然但是这样连接上去并存入数据有可能会报错,因为efcore,并不会主动地创建数据库
复制代码
 public class MySqlDemoInitializer
    {
        public static void Seed(IApplicationBuilder app)
        {
            // Get an instance of the DbContext from the DI container
            using (var context = app.ApplicationServices.GetRequiredService<MySqlDemoContext>())
            {
                //如果数据库不存在就会去创建
                context.Database.EnsureCreated();
                //这里半段有无数据在在表里,如果有不初始化数据,如果没有就初始化
                if (context.Set<Account>().Any() == false)
                {
                    SetBasicData(context);
                    SetTestAdmin(context);
#if DEBUG
                    SetTestNews(context);
                    SetTestCase(context);
                    SetTestPartner(context);
                    SetTestCompany(context);
                    SetTestPosition(context);
                    SetTestProblem(context);
                    SetTestRefund(context);
#endif
                }
            }
        }
复制代码

 

1
这里就是一个初始化的方法,在startup.cs中运行该方法  这个方式初始化有一个不灵活的地方,当程序运行之后只会执行一次。并不会像ef6那样,运行之后也会判断数据库,不存在也会去创建。<br><br>
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
 {

//将该方法放于最后执行
 MySqlDemoInitializer.Seed(app);
}
1
<em><br></em>还有一点,取数据的时候,取出来的Model是不会带有外键<br>这里就要用贪心加载 这样他就能取出Model所关联的外键
db.Set<Account>()
                .Include(m => m.Role)
                .Include(m => m.AccountInfo)
                .Include(m => m.AccountModules);

 还有如何在Controller中使用

复制代码
public class AccountController : Controller
{
        private AccountService _accountServ;
        public AccountController(MySqlDemoContext _db)
        {
            _accountServ = new AccountService(_db);
        }
}

    
复制代码

通过依赖注入,程序会自动将MySqlDemoContext new出来,并注入进来

 

posted @   无语1994  阅读(3346)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示