Code First是什么
Code First 顧名思義就是先寫代碼,當(dāng)然不是亂寫垦写,而是按照一定的約定吕世,先創(chuàng)建實體類,再通過編輯器自動生成數(shù)據(jù)模型梯投。Code First是EF的三大模式之一命辖,主要使用新的系統(tǒng)開發(fā),對應(yīng)數(shù)據(jù)庫已存在的情況下不適合分蓖。
Code First 簡單示例
下面通過一個簡單的示例尔艇,讓我們來熟悉一下Code First模式。
第一步:創(chuàng)建一個控制臺程序么鹤,命名為“EF.CodeFirstSample”终娃。
第二步:打開NuGet包管理界面,為上面新建的控制臺程序安裝EF蒸甜。
安裝成功之后棠耕,我們就可以在引用下面看到EF組件,如下圖:
第三步:創(chuàng)建模型
該示例中我們使用非常簡單的模型柠新,直接Program.cs文件中進行定義窍荧。
在Program.cs中添加以下兩個類:
public class Blog
{
public int BlogId { get; set; }
public string Name { get; set; }
public virtual List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
第四步:創(chuàng)建上下文
創(chuàng)建一個上下文,用于和數(shù)據(jù)庫保持會話恨憎,以便我們查詢和保存數(shù)據(jù)蕊退。我們定義一個派生自System.Data.Entity.DbContext的上下文,并為模型中每個類公開一個類型化DbSet<TEntity>框咙。
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
}
第五步:讀寫數(shù)據(jù)
實現(xiàn)program.cs中的Main方法,如下所示痢甘,這些代碼為上下文創(chuàng)建一個新的實例喇嘱,然后使用該實例為Blog表插入一條記錄,然后在從數(shù)據(jù)庫讀取所有的Blog塞栅,并且把名稱顯示出來者铜,具體代碼如下:
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
Blog blog = new Blog() { Name = "this is a test Name!" };
db.Blogs.Add(blog);
db.SaveChanges();
foreach (var item in db.Blogs)
{
Console.WriteLine("Name:"+item.Name);
}
}
Console.Read();
}
運行結(jié)果顯示,我們已經(jīng)成功添加一條數(shù)據(jù),并且成功讀取顯示出來作烟,那我們的數(shù)據(jù)存儲在哪里呢愉粤?
數(shù)據(jù)在哪里
如果本地Sql EXPRESS實例可用(默認(rèn)情況下隨vs2010安裝)的話, 則Code First默認(rèn)對該實例創(chuàng)建數(shù)據(jù)庫拿撩;
如果Sql EXPRESS實例不可用衣厘,則Code First將嘗試使用LocalDb(默認(rèn)情況下隨vs2012安裝);
如果Sql EXPRESS和LocalDb同時存在压恒,則Code First會優(yōu)先使用Sql EXPRESS影暴;
如果兩個都不存在,則運行就報錯探赫,所以需要自己在配置文件設(shè)置數(shù)據(jù)庫連接字符串型宙。
由于我們只有LocalDb可用,所以運行之后在LocalDb中自定創(chuàng)建一個新的數(shù)據(jù)庫和物理表伦吠,如下:
數(shù)據(jù)遷移
在實際開發(fā)中經(jīng)常會設(shè)計表之后再修改表結(jié)構(gòu)妆兑,那么對于Code First中修改表又是如何實現(xiàn)的呢?例如毛仪,現(xiàn)在為Blog類增加一個Url屬性搁嗓,如下:
再運行程序,會發(fā)現(xiàn)如下提示:
提示信息非常明確潭千,這個時候通過遷移來更新數(shù)據(jù)庫谱姓。
第一步:打開NuGet控制臺,輸入"Enable-Migrations"啟用Code First遷移刨晴。
第二步:在控制臺中輸入“Add-Migration AddUrl”屉来,其中AddUrl是遷移的名稱,方便以后根據(jù)這個名稱進行降級狈癞。
第三步:在控制臺中輸入“Update-Database”茄靠,這個時候可能會因為當(dāng)前項目不是啟動項而報錯,我們可以執(zhí)行Update-Database的時候指定啟動蝶桶,這么我只是簡單的將當(dāng)前項目設(shè)置為啟動項慨绳。
至此,遷移工作完成真竖,此時我們查看數(shù)據(jù)庫會發(fā)現(xiàn)脐雪,Blog表中已經(jīng)增加了URL字段,見下圖: