.NET Core1.1+VS2017RC+MySQL+EF搭建多層Web應用程序


先貼上解決方案截圖

 

一、新建4個解決方案文件夾

1-Presentation

2-Application

3-Domain

4-Infrastructure

二、在解決方案文件夾中分別創建項目

 

其余項目創建省略

項目引用關系:

1.ContosoUniversity.WebAdmin引用ContosoUniversity.Application、ContosoUniversity.Domain

2.ContosoUniversity.Application引用ContosoUniversity.Repository、ContosoUniversity.Domain

3.ContosoUniversity.Repository引用ContosoUniversity.Domain

4.ContosoUniversity.Domain不引用任何項目

三、ContosoUniversity.Domain項目中添加dll Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Relational

四、ContosoUniversity.Domain項目添加Student、SchoolContext、DbInitializer類

Student:POCO對象,對應數據庫中的Student表

SchoolContext:數據庫上下文,用於數據庫CRUD以及Migrations操作

DbInitializer:初始化數據庫並添加測試數據

using System;

namespace ContosoUniversity.Domain
{
    public class Student
    {
        public int ID { get; set; }
        public string LastName { get; set; }
        public string FirstMidName { get; set; }
        public DateTime EnrollmentDate { get; set; }
    }
}
using Microsoft.EntityFrameworkCore;

namespace ContosoUniversity.Domain.Data
{
    public class SchoolContext : DbContext
    {
        public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
        {
        }

        public DbSet<Student> Students { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Student>().ToTable("Student");
        }
    }
}
using System;
using System.Linq;

namespace ContosoUniversity.Domain.Data
{
    public static class DbInitializer
    {
        public static void Initialize(SchoolContext context)
        {
            context.Database.EnsureCreated();

            // Look for any students.
            if (context.Students.Any())
            {
                return;   // DB has been seeded
            }

            var students = new Student[]
            {
            new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01")},
            new Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{FirstMidName="Arturo",LastName="Anand",EnrollmentDate=DateTime.Parse("2003-09-01")},
            new Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")},
            new Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse("2001-09-01")},
            new Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")},
            new Student{FirstMidName="Nino",LastName="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")}
            };
            foreach (Student s in students)
            {
                context.Students.Add(s);
            }
            context.SaveChanges();
        }
    }
}

五、ContosoUniversity.WebAdmin項目修改

1.appsetting.json文件添加MySQL連接字符串

 "ConnectionStrings": {
    "DefaultConnection": "server=xxx;user id=xxx;password=xxx;database=ContosoUniversity;"
  }

2.添加NuGet包MySql.Data.EntityFrameworkCore 6.10.0-alpha、Microsoft.EntityFrameworkCore.Tools 1.1.0-preview4-final

 

打開工程.csproj工程文件,添加CliTool“Microsoft.EntityFrameworkCore.Tools.DotNet”

 

 

否則在migrations操作時會報【No executable found matching command "dotnet-ef"】錯誤

 

 

 

 

MySql版本不要選7.0.6-IR31,項目跑起來會報"MySql.Data.EntityFrameworkCore.Storage.Internal.MySQLCommandBuilderFactory..ctor(ISensitiveDataLogger<RelationalCommandBuilderFactory> logger, DiagnosticSource diagnosticSource, IRelationalTypeMapper typeMapper)"錯誤

 

3.StartUp類ConfigureServices方法注入數據庫上下文

      public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<SchoolContext>(options =>
                options.UseMySQL(Configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("ContosoUniversity.WebAdmin")));

            // Add framework services.
            services.AddMvc();
        }

注意,標紅的代碼不可缺少,否則EntityFramework無法執行Migrations,報錯信息如下

 

4.StartUp添加數據庫初始化

改造Configure方法簽名,添加SchoolContext參數

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, SchoolContext context)

Configure方法末尾添加數據庫初始化代碼

DbInitializer.Initialize(context);

 最后

把其余各層的代碼都加上項目就可以跑起來了,通過Migrations操作維護開發庫,.NET Core+MySQL+EF使用VS2017RC構建項目的坑基本就是這些了。。

 

注意

NuGet包Install或Uninstall命名執行后,查看VS2017RC中依賴的NuGet包發現沒有變化(實際上已InstallUninstall,VS2017RC沒有刷新),此時需要關閉解決方案重新打開,這時NuGet依賴才會刷新,這時VS2017RC的一個BUG!


免責聲明!

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



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