(轉(zhuǎn))EF三種編程方式詳細(xì)圖文教程(C#+EF)之Code First

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”终娃。


image

第二步:打開NuGet包管理界面,為上面新建的控制臺程序安裝EF蒸甜。


image

安裝成功之后棠耕,我們就可以在引用下面看到EF組件,如下圖:
image

第三步:創(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();
        }
image

運行結(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ù)庫和物理表伦吠,如下:


image

數(shù)據(jù)遷移

在實際開發(fā)中經(jīng)常會設(shè)計表之后再修改表結(jié)構(gòu)妆兑,那么對于Code First中修改表又是如何實現(xiàn)的呢?例如毛仪,現(xiàn)在為Blog類增加一個Url屬性搁嗓,如下:

image

再運行程序,會發(fā)現(xiàn)如下提示:


image

提示信息非常明確潭千,這個時候通過遷移來更新數(shù)據(jù)庫谱姓。

第一步:打開NuGet控制臺,輸入"Enable-Migrations"啟用Code First遷移刨晴。


image

第二步:在控制臺中輸入“Add-Migration AddUrl”屉来,其中AddUrl是遷移的名稱,方便以后根據(jù)這個名稱進行降級狈癞。


image

第三步:在控制臺中輸入“Update-Database”茄靠,這個時候可能會因為當(dāng)前項目不是啟動項而報錯,我們可以執(zhí)行Update-Database的時候指定啟動蝶桶,這么我只是簡單的將當(dāng)前項目設(shè)置為啟動項慨绳。
image

至此,遷移工作完成真竖,此時我們查看數(shù)據(jù)庫會發(fā)現(xiàn)脐雪,Blog表中已經(jīng)增加了URL字段,見下圖:


image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恢共,一起剝皮案震驚了整個濱河市战秋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讨韭,老刑警劉巖脂信,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件癣蟋,死亡現(xiàn)場離奇詭異,居然都是意外死亡狰闪,警方通過查閱死者的電腦和手機疯搅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埋泵,“玉大人幔欧,你說我怎么就攤上這事∏镄梗” “怎么了琐馆?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恒序。 經(jīng)常有香客問我瘦麸,道長,這世上最難降的妖魔是什么歧胁? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任滋饲,我火速辦了婚禮,結(jié)果婚禮上喊巍,老公的妹妹穿的比我還像新娘屠缭。我一直安慰自己,他們只是感情好崭参,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布呵曹。 她就那樣靜靜地躺著,像睡著了一般何暮。 火紅的嫁衣襯著肌膚如雪奄喂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天海洼,我揣著相機與錄音跨新,去河邊找鬼。 笑死坏逢,一個胖子當(dāng)著我的面吹牛域帐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播是整,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼肖揣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浮入?” 一聲冷哼從身側(cè)響起龙优,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舵盈,沒想到半個月后陋率,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡秽晚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年瓦糟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赴蝇。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡菩浙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出句伶,到底是詐尸還是另有隱情劲蜻,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布考余,位于F島的核電站先嬉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏楚堤。R本人自食惡果不足惜疫蔓,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望身冬。 院中可真熱鬧衅胀,春花似錦、人聲如沸酥筝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘿歌。三九已至掸掏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搅幅,已是汗流浹背阅束。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茄唐,地道東北人息裸。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像沪编,于是被迫代替她去往敵國和親呼盆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容