.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();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM