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

来源:http://www.cnblogs.com/TomGui/archive/2017/02/17/6407935.html
-Advertisement-
Play Games

先貼上解決方案截圖 一、新建4個解決方案文件夾 1-Presentation 2-Application 3-Domain 4-Infrastructure 二、在解決方案文件夾中分別創建項目 新建.NET Core Web應用程式,【身份驗證】需要選擇【個人用戶賬戶】否則無法執行migration ...


先貼上解決方案截圖

 

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

1-Presentation

2-Application

3-Domain

4-Infrastructure

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

 

新建.NET Core Web應用程式,【身份驗證】需要選擇【個人用戶賬戶】否則無法執行migrations操作,猜想原因可能少了某個NuGet包,具體沒去測試驗證

如果不選【個人用戶賬戶】,migrations操作時會報【No executable found matching command "dotnet-ef"】錯誤

其餘項目創建省略

項目引用關係:

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

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

3.ContosoUniversity.Repository引用ContosoUniversity.Domain

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

三、ContosoUniversity.Domain項目中添加Microsoft.EntityFrameworkCore.Tools 1.1.0-preview4-final

NuGet命令:Install-Package Microsoft.EntityFrameworkCore.Tools -Pre

四、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 6.10.0-alpha、MySql.Data.EntityFrameworkCore 6.10.0-alpha、Microsoft.EntityFrameworkCore.Tools 1.1.0-preview4-final

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!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在開發的時候經常需要訪問網路,比如Android就有好多這方面的框架:Volley、OkHttp、Retrofit等,當你看這些框架源碼時,可能會很好奇關於http的部分,它的首部欄位是什麼意思,http是如何工作的??等等,希望這篇文章會為你解惑。 一、概念 協議是指電腦通信網路中兩台電腦之間 ...
  • 最近有一點個人的時間,嘗試一下自己翻譯一下英文的 Optimizing graphics rendering in Unity Games, 這兒附上英文鏈接: 個人英文水平有限,unity圖像學知識也是入門,希望通過這次翻譯能增進自己的圖形學知識,若有錯誤,歡迎各位大神指點,讓我也學習進步,謝謝。 ...
  • 由OpenDigg 出品的安卓開源項目周報第八期來啦。我們的安卓開源周報集合了OpenDigg一周來新收錄的優質的安卓開源項目,方便安卓開發人員便捷的找到自己需要的項目工具。chuck 攔截並維持所有HTTP請求和響應 Just-Another-Android-App 在安卓中實現的很酷的效果 Ba ...
  • 1、查詢指定時間區間的工作日 這個主要難點是法定節假日,國家的法定節假日每年都不一樣,還涉及到調休,所以我們設計一個假日表。主要欄位有年份,類型(是否調休),假期日期。如下: 添加好當年的假期和調休日期 寫個方法計算出除開法定假日的工作日 執行這個表值函數後加上調休日和減去法定假日就是工作日了,大家 ...
  • 1、處理超大量數據能力強 2、可以運行在便宜的PC伺服器集群上 4、對數據的高併發讀寫能力強(mysql在上萬數據的寫入對磁碟IO消耗很大) 5、對海量數據的高效存儲和訪問。 6、對數據的高可靠擴展性和高可用性 ...
  • 最初的時候,我們只是想設計一個Web版本的HBase數據瀏覽器,類似於PL/SQL那樣便捷,後來又添加了HDFS分散式文件系統瀏覽器,再後來又添加了Hive數據倉庫瀏覽器功能。這個時候,hadoop集群由一個擴張到三個,大數據業務系統所涉及到的NoSQL資料庫也越來越多,譬如Neo4j、MongoD... ...
  • 查詢本月所有的天數: 查詢本周所有的天數: 示例: 如下圖所示,有表MO_Orders,欄位:BookTime,Number,Count。 查詢出本周的每天的數據總和。 查詢語句: 查詢效果如下圖,其中id為星期,從周一開始至周日: 示例:如下圖所示,有表: MO_Orders,欄位:BookTim ...
  • phpMyAdmin提示“無法在發生錯誤時創建會話,請檢查 PHP 或網站伺服器日誌,並正確配置 PHP 安裝。” ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...