Microsoft SQL Server Compact 4.0&&ADO.NET Entity Framework 4.1&&MVC3


最近重新查看微軟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  打開該數據庫就能查看或者修改里面的表和數據等

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM