從零開始構建一個的asp.net Core 項目(二)

來源:互聯網
上載者:User

標籤:sig   修改   mvc控制器   time   cat   字元   action   nic   讀檔案   

接著上一篇部落格繼續進行。上一篇部落格只是顯示了簡單的MVC視圖頁,這篇部落格接著進行,串連上資料庫,進行簡單的CRUD。

首先我在Controllers檔案夾點擊右鍵,添加->控制器 彈出的對話方塊中選擇miniual Dependencies。在項目的根目錄下添加一個Models檔案夾,在該檔案夾下添加一個Users.cs類。(該類在資料庫中對應一張表,表名為Users 裡邊有三個欄位 其中ID是主鍵,自增的。)

    public class Users    {        [Key]        public int Id { get; set; }        public string Name { get; set; }        public string pwd { get; set; }    }
Users.cs

我再次在Controlles檔案夾上點擊右鍵 ,添加->控制器,在彈出的對話方塊中選擇 視圖使用Entity Framework 的MVC控制器 模型類選擇我剛剛添加的那個Users.cs類,在資料內容選項中,我選擇了建立一個名稱為UsersContext.cs 之後點擊完成。

系統會給我報錯,錯誤內容為 “No executeable found matching command "dotnet-aspnet-codegenerator”,昨天和今天都困在了這個錯誤上邊,今天下午突然想到,在系統為我產生的帶MVC視圖頁的項目都沒有報錯,可以正常使用。於是我點開了項目的*.csproj檔案,結果發現他比我多了這樣的一行代碼。

 <ItemGroup>    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" />  </ItemGroup>

於是我把這行代碼加進了我的*.csproj檔案中去。加進去之後我發現可以了,那個錯誤解決了。突然之間覺得這個代碼好熟悉,應該是在微軟的asp.net core 官方說明文檔上見過,今天想查一下,這行代碼什麼作用,可是找了一下,一時間沒有找到。

我再次重複在Controlles檔案夾上點擊右鍵 ,添加->控制器,在彈出的對話方塊中選擇 視圖使用Entity Framework 的MVC控制器 模型類選擇我剛剛添加的那個Users.cs類,在資料內容選項中,我選擇了建立一個名稱為UsersContext.cs 之後點擊完成。

接著系統又給我報了另一個錯誤 (),不過這個錯誤就明顯了,說的大致內容就是“基架編輯StrartUp.cs這個類用DI去註冊一個新的Context失敗....”

到了這裡我想到了,我在添加mini Dependencies 控制器時系統為我產生的一個閱讀檔案 “ScaffoldingReadMe.txt”,

ASP.NET MVC core dependencies have been added to the project.However you may still need to do make changes to your project.1. Suggested changes to Startup class:    1.1 Add a constructor:        public IConfigurationRoot Configuration { get; }        public Startup(IHostingEnvironment env)        {            var builder = new ConfigurationBuilder()                .SetBasePath(env.ContentRootPath)                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)                .AddEnvironmentVariables();            Configuration = builder.Build();        }    1.2 Add MVC services:        public void ConfigureServices(IServiceCollection services)        {            // Add framework services.            services.AddMvc();       }    1.3 Configure web app to use use Configuration and use MVC routing:        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)        {            loggerFactory.AddConsole(Configuration.GetSection("Logging"));            loggerFactory.AddDebug();            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            else            {                app.UseExceptionHandler("/Home/Error");            }            app.UseStaticFiles();            app.UseMvc(routes =>            {                routes.MapRoute(                    name: "default",                    template: "{controller=Home}/{action=Index}/{id?}");            });        }
ScaffoldingReadMe.txt

於是我開啟了這個檔案,上邊的內容說的很清楚讓我配置Startup.cs 檔案於是我按照上邊進行一步步的配置了。直接粘貼就可以。我查看了一下我的跟目錄下沒有appsettings.json檔案,於是我自己添加了這個ASP .NET設定檔,接下來就就可以順利的進行了。

添加了試圖頁,修改了資料庫的連接字串。這樣基本都完成了。

示範效果如下:

由於是從零開始構建,既然是從零開始,我要搞清楚系統為我產生了什麼東西,以及這些東西怎麼用。

我點開了*.csproj檔案發現用EF的時候系統我們添加了這些的引用。

1     <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" />2     <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.1" />3     <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.1" />4     <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" />5     <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.0" />6     <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.0" />

 我依次查了對應包的描述說明

1. ”Shared design-time components for Entity Framework Core tools. “應該就是一個組件,配合EF架構使用的。

2.“Microsoft SQL Server database provider for Entity Framework Core.”

3.“Design-time Entity Framework Core Functionality for Microsoft SQL Server.” 由於我用的是Sql Server 的資料庫,所以第二和三這兩個包應該是EF連資料必須用的

4.“Debug output logger provider implementation for Microsoft.Extensions.Logging. This logger logs messages to a debugger monitor by writing messages with System.Diagnostics.Debug.WriteLine()”  這個應該是我們在StartUp.cs類中添加的 

  loggerFactory.AddDebug();  

這行代碼用到的,具體作用就是將運行過程中調試的錯誤給輸出來。

5.“A middleware that supports creating a communication channel between the development environment and one or more web browsers.”這個包的作用我猜測:在我們下斷點調試的時侯用到的

6.”Code Generation tool for ASP.NET Core. Contains the dotnet-aspnet-codegenerator command used for generating controllers and views.“這個包包含了一個命令 “dotnet-aspnet-codegenerator” 以後如果用EF的時候出現無法識別“dotnet-aspnet-codegenerator”命令錯誤 那就是沒有加這個包。包的作用就是組建控制器和對應的視圖。

我點開了系統為我添加的Data檔案夾,裡邊有一個*context.cs類從名字上可以看出這是一個資料內容的類,在我們的*Controller.cs 中有一個靜態唯讀欄位就是它,既然點開了*Contrllers.cs類,我就看看這個類裡邊有什麼。除了幾個View對應的action 還有一個建構函式,用於對*context.cs類進行初始化。我不禁想這個建構函式在哪裡用了,以及怎麼初始化了? 我用反編譯工具也沒又找到。於是放了下來。

我點開了StartUp.cs 這個類。除了我們先前配置的那些東西之外,EF為我們添加了一個服務

1   public void ConfigureServices(IServiceCollection services)2         {3             services.AddMvc();4             //下邊這是EF為我們添加的5             services.AddDbContext<UsersContext>(options =>6                     options.UseSqlServer(Configuration.GetConnectionString("UsersContext")));7    8         }

這個服務就是配置了EF串連資料庫所用的一個上下文,以及聲明了串連的資料庫類型是sqlserver,串連資料庫的字串是“UsersContext”裡邊的值。

UsersContext這個字串  在我們用EF之前在Startup.cs類中配置的建構函式中聲明的。

        public IConfigurationRoot Configuration { get; }        public Startup(IHostingEnvironment env)        {            var builder = new ConfigurationBuilder()                .SetBasePath(env.ContentRootPath)                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)                .AddEnvironmentVariables();            Configuration = builder.Build();        }

在這裡我們設定了路徑為我們當前運行環境的根目錄,讀取的json檔案名稱為“appsettings.json”,最後把它給了賦值給了Configurtation這個屬性。

所以我們在那裡才能夠找到UsersContext裡邊的值。

到了這裡系統為我們產生的東西基本都在這裡了。可以串連上資料庫進行CRUD了。基本到這裡就要告一個段落了。

 

從零開始構建一個的asp.net Core 項目(二)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.