zoukankan      html  css  js  c++  java
  • 如何利用EFCore实现自动化的CodeFirst

    前提

    1. 在没有程序员进行指导的情况下,实施可以快速进行项目部署;
    2. 无需执行数据库脚本,程序员告别繁琐的数据库建表操作,以及默认数据的配置;

    Step1:项目引用添加 Microsoft.EntityFrameworkCore

    Step2:

      在Startup.cs文件中的ConfigureServices方法内添加代码

                services.AddDbContext<CoreDbContext>(options => options.UseSqlServer("你的数据库链接字符串"));
    

    Step3:

      新建文件DbContextSeed.cs

    using Microsoft.EntityFrameworkCore;
    using RunGo.Core.Expand;
    using RunGo.Core.Managing;
    using System;
    using System.Linq;
    using System.Threading.Tasks;
    using UtilHelp;
    
    namespace RunGo.Core.Web.Host.Startup.Initialize
    {
    
        namespace mvcforcookie.Data
        {
            public class DbContextSeed
            {
                private string badStr = "初始化数据库失败";
                private string okStr = "初始化数据库成功";
                public async Task SeedAsync(DbContext context, IServiceProvider service)
                {
                    if (context.Set<Tenants>().Count() == 0)
                    {
                        //创建初始租户
                        var defultTenant = new Tenants()
                        {
                            Name = DefaultSet.DefaultName,
                            TenancyName = DefaultSet.DefaultCName,
                            PassWord = EncryptionHelp.MD5Encrypt64("123456", DefaultSet.DefaultName),
                            Id = DefaultSet.DefaultId
                        };
                        try {
                            await context.AddAsync(defultTenant);
                            var result = await context.SaveChangesAsync();
                            if (result == 0)
                                Console.WriteLine(badStr);
                            else
                                Console.WriteLine(okStr);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(badStr);
                        }
    
                    }
                }
            }
        }
    }

    新建文件 InitializeTheDBExtensions.cs

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.DependencyInjection;
    using System;
    
    namespace RunGo.Core.Web.Host.Startup.Initialize
    {
        public static class InitializeTheDBExtensions
        {
            /// <summary>
            /// 初始化数据库
            /// </summary>
            /// <param name="host"></param>
            /// <param name="sedder"></param>
            /// <returns></returns>
            public static IWebHost InitializeDbContext<TContext>(this IWebHost host, Action<TContext, IServiceProvider> sedder)
                where TContext : DbContext
            {
                using (var scope = host.Services.CreateScope())
                {
                    var services = scope.ServiceProvider;
                    var context = services.GetService<TContext>();
                    try
                    {
                        context.Database.Migrate();
                        sedder(context, services);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("初始化失败");
                    }
                }
                return host;
            }
        }
    }

    Step4:在Main方法里调用初始化方法

            public static void Main(string[] args) {
                 BuildWebHost(args)
                   .InitializeDbContext<CoreDbContext>((context, services) =>
                   { new DbContextSeed().SeedAsync(context, services).Wait(); })
                 .Run();
            }

    Step5:执行项目即可看到成果了。

  • 相关阅读:
    SpringMVC文件上传
    c函数调用过程原理及函数栈帧分析
    《C++游戏开发》笔记十一 平滑动画:不再颤抖的小雪花
    Java学习笔记——IO操作之以图片地址下载图片
    uva 400 Unix ls 文件输出排版 排序题
    【VC++积累】之八、PreTranslageMessage;TranslageMessage;GetMessage和PeekMessage的区别
    uva 331 Mapping the Swaps 求交换排序的map 纯DFS
    uva 10344 23 out of 5 凑运算结果 全排列+dfs
    Java学习笔记——File类文件管理及IO读写、复制操作
    uva 301 Transportation 铁路公司的阳谋 纯dfs暴力
  • 原文地址:https://www.cnblogs.com/yuchenghao/p/12421688.html
Copyright © 2011-2022 走看看