簡介
對於JAVA程序員來講,一般對Hibernate都是很熟悉的。EF和Hibernate所起的角色一致。而EF多是約定優於配置。同樣EF也有DataBase First和Code First的開發方式,本文介紹Code First的編程方式。
本文在連接的數據庫是外置的SQLSERER
環境搭建
項目(Project)->Manager NuGet Packages…
Online -> EntityFrameWork -> Install
效果圖
使用步驟
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 快速入門