• .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!

  • 相关阅读:
    词频统计
    第二周每周例行报告
    事务管理(ACID)
    Redis
    jar包和war包的区别
    CSS实现Loading加载动画
    如何实现“返回顶部”的页面效果
    PHP页面跳转-常见方法
    局域网络调试方式
    Thinkphp 统计数据库字段总值
  • 原文地址:https://www.cnblogs.com/TomGui/p/6407935.html
Copyright © 2020-2023  润新知