最近重新查看微軟MvcMusicStore-v3.0的源代碼,發現忽略了很多重要的東西,特別是數據訪問那一部分。
首先Microsoft SQL Server Compact 4.0 詳細的介紹和下載地址 鏈接:http://www.microsoft.com/zh-cn/download/details.aspx?id=17876
Microsoft SQL Server Compact 4.0 是一種免費的嵌入式數據庫,軟件開發人員可以使用它來構建 ASP.NET 網站和 Windows 桌面應用程序。SQL Server Compact 4.0 的優點是:占用的空間小,支持在應用程序文件夾中專門部署其二進制文件,輕松地使用 Visual Studio 和 WebMatrix 進行應用程序開發,以及無縫地將架構和數據遷移到 SQL Server。
為什么會想要用Microsoft SQL Server Compact 4.0這個嵌入式的數據庫,是用為有時為了查看或者實現一些簡單的效果,又不得不裝SQL Server 2008或者2010很麻煩,而Microsoft SQL Server Compact 4.0建立的以.sdf的數據庫文件就沒有這些限制所以.........
其次是SQL Server Compact Toolbox 這個VS的擴展插件也是無意中發現,使用它可以創建SQL Server Compact 4.0的.sdf數據庫文件,不過我現在也只知道使用sql 語句建立表和增刪查改等操作,還需進一步學習........
根據圖中所示,安裝完成后重啟VS就可以在菜單的工具中找打,並打開使用。
最后是ADO.NET Entity Framework 4.1 下載地址:http://www.microsoft.com/en-us/download/details.aspx?id=8363
下載安裝后,在項目中引用后即可使用
這里EF的具體教程就不多說了,博客園一搜一大堆。
示例項目如下:
1、在Web.config中配置如下:
<connectionStrings>
<add name="MyStoreEntities"
connectionString="Data Source=|DataDirectory|MyShop.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
注意,這里數據庫連接串的名稱很重要,以后使用 EF Code-First 的時候,通過它來找到數據庫,這里的鏈接串種使用了 Data Source=|DataDirectory|MvcMusicStore.sdf,這里的 DataDirectory 指的就是項目中的 App_Data 文件夾夾。如果項目中沒有App_Data就需要先建立該文件夾。
2、建立實體類
Administrator.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace EntityFramerwork.Models { [Bind(Exclude = "AdministratorID")] public class Administrator { public int AdministratorID {get;set;} public string AdministratorName {get;set;} public string AdministratorPassword { get; set; } } }
Classification.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace EntityFramerwork.Models { [Bind(Exclude = "ClassificationID")] public class Classification { public int ClassificationID {get;set;} public string ClassificationName { get; set; } public int ClassificationParentID {get;set;} } }
Commodity.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace EntityFramerwork.Models { [Bind(Exclude = "CommodityID")] public class Commodity { public int CommodityID {get;set;} public string CommodityName {get;set;} public decimal CommodityPrice { get; set; } public int ClassificationID {get;set;} public string CommodityIntroduction {get;set;} } }
MyStoreEntities.cs(這個類很重要,它的名字一定要同配置文件中add name="MyStoreEntities"的name一樣)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; namespace EntityFramerwork.Models { public class MyStoreEntities : DbContext { public DbSet<Administrator> Administrators { get; set; } public DbSet<Classification> Classifications { get; set; } public DbSet<Commodity> Commoditys { get; set; } } }
這個類繼承了DbContext類,對於這個類還沒有深入了解.....
該示例項目中Administrators,Classifications,Commoditys這三個名稱就是生成MyShop.sdf文件數據庫的中的表名。
SampleData.cs(這個類用於在文件數據庫創建前初始化一些數據,以便程序中使用)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; namespace EntityFramerwork.Models { public class SampleData : DropCreateDatabaseIfModelChanges<MyStoreEntities> { protected override void Seed(MyStoreEntities context) { new List<Administrator> { new Administrator { AdministratorName = "Rock",AdministratorPassword="123" }, new Administrator { AdministratorName = "Jazz",AdministratorPassword="1234" } }.ForEach(a => context.Administrators.Add(a)); var classifications = new List<Classification> { new Classification{ClassificationName="服飾",ClassificationParentID=0}, new Classification{ClassificationName="男裝",ClassificationParentID=1}, new Classification{ClassificationName="女裝",ClassificationParentID=1}, new Classification{ClassificationName="T恤",ClassificationParentID=2}, new Classification{ClassificationName="襯衫",ClassificationParentID=2}, new Classification{ClassificationName="衛衣",ClassificationParentID=3}, new Classification{ClassificationName="運動服",ClassificationParentID=3} }; classifications.ForEach(b => context.Classifications.Add(b)); } } }
3、在程序啟動時建立文件數據庫
Global.asax.cs中的 Application_Start()中加上紅色那句代碼
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(new EntityFramerwork.Models.SampleData());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
4、Controllers中的調用如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace EntityFramerwork.Controllers 8 { 9 public class HomeController : Controller 10 { 11 public ActionResult Index() 12 { 13 ViewBag.Message = "歡迎使用 ASP.NET MVC!"; 14 Models.MyStoreEntities mystoryentity = new Models.MyStoreEntities(); 15 var administrator = mystoryentity.Administrators.ToList(); 16 return View(administrator); 17 } 18 19 public ActionResult About() 20 { 21 return View(); 22 } 23 } 24 }
主要就是紅色那兩句代碼
5、cshtml中的代碼:
@model IEnumerable<EntityFramerwork.Models.Administrator> @{ ViewBag.Title = "主頁"; } <h2>@ViewBag.Message</h2> <ul> @foreach (var ad in Model) { <li>@ad.AdministratorID</li> <li>@ad.AdministratorName</li> <li>@ad.AdministratorPassword</li> } </ul>
這樣就可以了,運行代碼,就可以在App_Data中生成一個名為MyShop.sdf的數據庫文件,使用SQL Server Compact Toolbox 打開該數據庫就能查看或者修改里面的表和數據等