環境:
win10,SQL Server 2008 R2
參考:
asp.net mvc框架之EF的使用 - black娃 - 博客園
https://www.cnblogs.com/fjiqiang/p/11131365.html
目錄
- 數據庫查詢
- 要求
- 思路
- 操作
- razor使用
- 項目發布
- 要求
- 實現
數據庫查詢
要求
從服務器的數據庫中查詢N條數據。
思路
- 使用NuGet安裝EF(Entity Framework)
- 參考上述鏈接,使用FluentAPI方式配置
操作
- 配置連接
找到項目目錄下的Web.config(不是Views文件夾下的),找到<connectionStrings>
,在其中添加字符串,類似下面:
<connectionStrings><add name="conn1" connectionString="data source=SqlServerIP;initial catalog=數據庫名稱;user id=用戶名;password=密碼;" providerName="System.Data.SqlClient"/></connectionStrings>
其中name是給數據庫鏈接起的名字,后面會用到。
2. 在數據庫上創建對應表,假設我的表叫enhancer,包含下面幾列。
3. 在Models文件夾下創建文件Enhancer.cs,寫一個跟表對應的類:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;namespace WebApplication1.Models
{[Table("dbo.enhancer")]public class Enhancer{public int id { get; set; }public string name { get; set; }public string seq { get; set; }public string descs { get; set; }public string notes { get; set; }public string refs { get; set; }}
}
- 創建DbContext類:這里用到了前面提到的、數據庫連接的名稱。
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Reflection;
using System.Web;namespace WebApplication1.Models
{public class MyDbContext:DbContext{public MyDbContext() : base("name=conn1") { }public DbSet<Enhancer> enhancers { get; set; }// 每操作一個表這里就要寫一個DbSet<實體類>protected override void OnModelCreating(DbModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);//從某個程序集中加載所有繼承自EntityTypeConfiguration類到配置中modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());}}
}
- 創建實體類的配置類。每個實體類都要寫一個配置類,所以我寫了一個叫做DBConfig.cs的文件,里面每個配置類如下:
public class EnhancerConfig:EntityTypeConfiguration<Enhancer>
{public EnhancerConfig(){this.ToTable("dbo.enhancer");}
}
記得修改對應的實體類名稱和表名。
6. 操作數據庫
以上寫好之后,可以在某個Controller下這樣寫:
public ActionResult Detail(string id) {using (MyDbContext db = new MyDbContext()) {var name = "CMV-enhancer";// 這里是查找名稱相同的。如果要模糊查找,可以使用Contains// p => p.Name.Contains(keyword)var enhancers = db.enhancers.Where(s => s.name == name).ToList();foreach (var en in enhancers){// 在控制臺打印信息System.Diagnostics.Trace.WriteLine(en.seq);}}return View();
}
razor使用
前面寫過blazor,寫出的razor是以razor
結尾的文件,不過在ASP.NET MVC里,razor是以cshtml
結尾的。雖然語法有一點差異,但是大部分代碼可以直接從blazor項目中復制過來。
我在復制時修改的點是這些:
- blazor里,頁面里的變量是在
@code{}
里寫的,變量可以私有可以共有;@code{}
也一般放在razor最后。但是asp.net里,頁面里的變量要寫在@{}
里,不寫訪問控制,并且要放在頁面頂端(防止報未定義錯誤),如下圖所示:
- asp.net的razor也是可以展示一個對象的信息。比如我自定義了一個類叫Vector,其中有一個私有變量是
List<b>
,那么需要在頁面上先寫@model WebApplication1.Models.Vector
,使用時寫@Model.變量
,比如:<circle cx="@Model.Cx" cy="@Model.Cy" r="@Model.OuterRadius" fill="#ccc" stroke="#ccc" stroke-width="1" />
- 如果需要后臺向前端傳遞一個對象,后臺要寫
return View(對象);
- 另外,asp.net直接寫js是可以的,不用像blazor那種注入服務,所以要把之前寫的諸如
@onclick
改成onclick
- 后臺如果要向前臺傳遞簡單的變量(比如string、int),那可以用ViewBag。舉例:
后臺:
前臺:double r = 300; ViewBag.Result = r; ... return View()
也可以使用ViewData。<p>The result of the calculation is: @ViewBag.Result</p>
后臺:
前臺:ViewData["SerializedObject"] = json;
<pre>@ViewData["SerializedObject"]</pre>
項目發布
要求
要求發布在云服務器上,上面部署了IIS和sql server。
實現
-
win10遠程連接云服務器
win+R
,再輸入mstsc
,輸入ip、用戶名,驗證時輸入密碼即可。 -
發布文件
項目名稱上右鍵點擊發布,然后選擇文件夾。
然后復制整個文件夾到服務器上適當位置。注意檢查端口是否開放。