3_EF環境搭建以及數據訪問


簡介


  • 對於JAVA程序員來講,一般對Hibernate都是很熟悉的。EF和Hibernate所起的角色一致。而EF多是約定優於配置。同樣EF也有DataBase First和Code First的開發方式,本文介紹Code First的編程方式。

  • 本文在連接的數據庫是外置的SQLSERER


環境搭建

  • 項目(Project)->Manager NuGet Packages…

  • Online -> EntityFrameWork -> Install

  • 效果圖
    xg


使用步驟


Model類的寫法

  • 數據庫中對應的表,要對應一個Model類,表之間的關係通過類之間字段的關係來表示。如上一篇文章分析的那樣,分別定義了類
    User類
namespace GradeMIS.Models
{
    public class User
    {
        public int UserId { get; set; }
        public String UserName { get; set; }
        public int Score { get; set; }
        public int State { get; set; }
        public String UsePasswd { get; set; }
        public String Depart { get; set; }
        public String Domain { get; set; }
        public String RealName { get; set; }
        public String Protitle { get; set; }
        public String FinalGrade { get; set; }
        public virtual List<CopyRight> CopyRights { get; set; }
        public virtual List<Paper> Papers { get; set; }
        public virtual List<Patent> Patents { get; set; }
        public virtual List<Project> Projects { get; set; }
        public virtual List<TeachingPrize> TeachingPrizes { get; set; }
        public virtual List<TextBook> TextBooks { get; set; }    }
}

UserId對應的是數據庫中User表的主鍵UserId,如果要使用UserName做主鍵,必須在UserName屬性上面加上[KEY]
User類中定義的Papers列表前面的virtual是懶加載,只有用到的時候纔會查詢數據庫。

Paper類

namespace GradeMIS.Models
{
    public class Paper
    {
        public int PaperId { get; set; }
        public String PaperName { get; set; }
        public String PaperType { get; set; }
        public DateTime PubTime{ get; set; }
        public String Desc { get; set; }
        public int UserId{ get; set; }
        public String Number { get; set; }
        public virtual User User{get; set; }
    }
}

Paper 類中的UserId要參照User的Id,所以在Paper類中必須定義UserId的屬性。
其他類的Model和以上2個類似。

  • 在Web.config文件夾中配置數據庫訪問
  <connectionStrings>
    <add name="GradeMISEntities" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=gradeMIS;User ID=sa;password=***;integrated security=true;" />
  </connectionStrings>

name很重要,會建立一個同名類。providerName必須有,提供者名稱。connectionString:連接字符串,大家應該都很熟悉。

  • 接下來要建立一個同名的類GradeMISEntities,完成Model類和數據庫中表的映射。
namespace GradeMIS.Models
{
    public class GradeMISEntities:DbContext
    {

            public DbSet<User> Users { get; set; }
            public DbSet<Admin> Admins { get; set; }
            public DbSet<CopyRight> CopyRights { get; set; }
            public DbSet<Paper> Papers { get; set; }
            public DbSet<Patent> Patents { get; set; }
            public DbSet<Project> Projects{ get; set; }
            public DbSet<TeachingPrize> TeachingPrizes { get; set; }
            public DbSet<TextBook> TextBooks { get; set; }
            public DbSet<News> Newss { get; set; }
            public DbSet<Banner> Banners { get; set; }
    }
}

<>中的內容是Model類名,後面跟着的是數據庫中的表的名稱。

  • 設置初試化數據要有一個SampleData 插入數據
    下面是數據文件:
namespace GradeMIS.Models
{
public class SampleData : DropCreateDatabaseIfModelChanges<GradeMISEntities>
{
    protected override void Seed(GradeMISEntities context)
    {
       var users = new List<User>
       {
         new User { UserName = "ymlabner", Score=0,State=1 , UsePasswd="123123",Depart="計算機學院",Domain="Java3D",RealName="yml", Protitle="院士",FinalGrade="博士"},
            };       
        }
    }
}

但要隨着程序運行就插入數據,還要在Global.aspx文件中修改

protected void Application_Start()
{
///加上這句代碼
System.Data.Entity.Database.SetInitializer(new SampleData());
AreaRegistration.RegisterAllAreas();            WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
}
  • 當然要想隨着程序啓動就完成數據庫創建,必須進行實例化,在HomeController中實例化
GradeMISEntities db = new GradeMISEntities();
  • 運行程序後數據庫變建立好了,程序和數據庫和之間的映射建立好了,連初試數據也初始化了。
    效果

接下來在Controller的Action中就可以調用這個實例進行數據庫的訪問了,當然你可以將這些操作封裝在數據訪問層中。

採用EF增刪改查的簡單介紹(以User類爲例)

GradeMISEntities db = new GradeMISEntities();
Create:

db.Users.Add(user);//user是傳入的User對象
db.saveChages();

Delete:

db.Remove(user); //user是傳入的User對象
db.saveChanges();

Query:

db.Users.ToList();//查詢所有
db.Users.Single(g=>g.UserId==id)//id是傳入的參數,查詢結果爲空會報錯
db.User.SingleOrDefault(g=>g.UserId==id)//1條數據或空
db.User.Where(g=>g.UserId==id)//多條數據
、、、

Edit:

  db.Entry(user).State = EntityState.Modified;//user爲參數
  db.SaveChanges();

小結


1 小結
本文介紹了Entity FrameWork的環境搭建以及在MVC項目中的使用,以及EF增刪改查額簡單語法。

2 參考資料
EF CODE FIRST 快速入門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章