.NetCore下使用EF DbFirst操作MySql

新建.NetCore的控制台项目

 

使用Nuget安装Pomelo.entityframeworkcore.mysql

 

工程右键--->编辑.csproj文件,把以下内容写入到工程文件

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.1.1" />
</ItemGroup>

 

修改后工程文件如下

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.1.1" />
<PackageReference Include="Snowflake.NetCore" Version="1.0.0" />
</ItemGroup>

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.1.1" />
</ItemGroup>

</Project>

打开命令行,cd到项目根目录(.csproj所在目录)下,执行如下命令:

dotnet ef dbcontext scaffold "server=localhost;uid=root;pwd=123456;port=3306;database=document;" "Pomelo.EntityFrameworkCore.MySql"-o EF -f

参数说明

-o 输出目录(-OutputDir)

-f 覆盖现有文件(-Force),数据库更新时会用到

-t 指定表名(-Tables)

如果中间出错,请先确保你的工程文件可以编译成功,并使用-f参数覆盖现有文件


执行成功后就可以看到相应的Context和model了。

对于生成的文件,我们不作任何修改,以免更新时造成冲突。

 创建我们自己的ContextConfig类

using Microsoft.EntityFrameworkCore;

namespace EF2MySqlDBFirst.EF
{
    public class DataBaseContextConfig
    {
        private const string LightConnectionString = "server=localhost;userid=root;pwd=123456;port=3306;database=light;";
        private const string LogConnectionString = "server=localhost;userid=root;pwd=123456;port=3306;database=log;";
        /// <summary>
        /// 创建Light数据库上下文
        /// </summary>
        /// <returns></returns>
        public static lightContext CreateLightContext()
        {
            var optionBuilder = new DbContextOptionsBuilder<lightContext>();
            optionBuilder.UseMySql(LightConnectionString);
            var context = new lightContext(optionBuilder.Options);
            return context;
        }
        /// <summary>
        /// 创建log数据库上下文
        /// </summary>
        /// <returns></returns>
        public static logContext CreateLogContext()
        {
            var optionBuilder = new DbContextOptionsBuilder<logContext>();
            optionBuilder.UseMySql(LogConnectionString);
            var context = new logContext(optionBuilder.Options);
            return context;
        }

    }
}

这样使用context对象时,用我们自己生成的类的CreateContex方法创建,保证数据库更新时重新生成的代码对我们的程序没有影响。

测试

static void Main(string[] args)
        {
            using (var context = DataBaseContextConfig.CreateLightContext())
            {
                context.User.Add(new User
                {
                    Age = 22,
                    CreateTime = DateTime.Now,
                    UserName = "zisi",
                    UserId = new IdWorker(1, 1).NextId(),
                    Status = 1,
                });

                context.SaveChanges();
                Console.WriteLine("New date:" + context.User.OrderByDescending(u => u.UserId).FirstOrDefault().CreateTime);
            }
            Console.WriteLine("press enter to exit!");
            Console.ReadLine();
        }

 

posted @ 2018-07-25 11:43  子思  阅读(4408)  评论(0编辑  收藏  举报