最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Entity?Framework代碼優(yōu)先Code?First入門

 更新時間:2022年06月21日 10:47:32   作者:天方  
這篇文章介紹了Entity?Framework的代碼優(yōu)先模式Code?First,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

CodeFirst是EntityFramework 4.1后新增的一種映射方式,在這種方式下,開發(fā)人員只需要編寫代碼,由ORM框架自動動創(chuàng)建模型和數(shù)據(jù)庫,數(shù)據(jù)庫則可看作類似于XML一樣序列化的方式,非常簡潔(由于開發(fā)人員可以無需關(guān)心數(shù)據(jù)庫的具體結(jié)構(gòu),最初也有叫做CodeOnly的)。

下面就以一個簡單的例子演示一下如何使用CodeFirst。

一、用Nuget添加EntityFramework框架的引用。

二、編寫代碼

    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            if (!string.IsNullOrEmpty(name))
            {
                var blog = new Blog { Name = name };
                db.Blogs.Add(blog);
                db.SaveChanges();
            }

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Name { get; set; }
    }

    public class BloggingContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
    }

這里和以前的一點區(qū)別就是增加了一個繼承自DbContext的BloggingContext對象,它表示數(shù)據(jù)庫對象,Blogs則是它的表。如果不關(guān)心數(shù)據(jù)庫的存儲方式大可以把它看作一個全局變量。

上述代碼是可以直接執(zhí)行的,雖然這里沒有主動指定數(shù)據(jù)庫,但程序默認(rèn)使用LocalDb或SqlExpress創(chuàng)建庫,因為我用的是VS2012,就使用了LocalDb創(chuàng)建了庫,并且生成的表的結(jié)構(gòu)如下:

如下是CodeFirst映射數(shù)據(jù)庫的一些基本原則:

數(shù)據(jù)庫名:當(dāng)沒有顯示設(shè)置數(shù)據(jù)連接的時候,默認(rèn)的數(shù)據(jù)庫是:.\SQLEXPRESS。如果本地沒有SQLEXPRESS,EF會嘗試LocalDb ((localdb)\v11.0) .\SQLEXPRESS 這個數(shù)據(jù)庫包含在VS2012中。數(shù)據(jù)庫的名稱一般是DbContext的"命名空間.類名"

表名:表名默認(rèn)為模型類名的復(fù)數(shù)形式,并且每個表都使用dbo構(gòu)架創(chuàng)建。這里生成的就是dbo.Lodgings.

主鍵:Code First會默認(rèn)將以類似Id結(jié)尾來命名的屬性當(dāng)作主鍵,如ID,Id,本例中的DestinationId都自動設(shè)置為主鍵。如果該屬性是int類型,Code First會在數(shù)據(jù)庫中默認(rèn)將該列設(shè)置為自增長。

數(shù)據(jù)類型:在SQL Server中,字符串默認(rèn)映射成nvarchar(max),byte[]映射成varbinary(max),bool映射成bit,decimal映射成decimal(18, 2),float映射成float。同時因為bool,decimal,float等是值類型,不能為給他們分配Null值。所生成的數(shù)據(jù)庫會要求對應(yīng)的列非空。如Lodgings表中的IsResort

外鍵:當(dāng)CodeFirst檢測到一對多的映射時,會自動生成相應(yīng)的外鍵關(guān)聯(lián),這個下一節(jié)再介紹。

三、數(shù)據(jù)模型變化的處理

當(dāng)我們的數(shù)據(jù)結(jié)構(gòu)變化了后,就會出現(xiàn)數(shù)據(jù)模型和數(shù)據(jù)庫不一致的情況。此時運(yùn)行則會出現(xiàn)如下異常:

未經(jīng)處理的異常: System.InvalidOperationException: The model backing the 'BloggingContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

官方給的解決方案如下:Code First Migrations。不過,在開發(fā)過程中,由于數(shù)據(jù)結(jié)構(gòu)變更是很常見的事情,按照這個方案來未免麻煩了點,很多時候我們是采用一種更加簡單粗暴的做法:

System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

把這句話放在程序的最開始。這樣,一旦檢測到數(shù)據(jù)庫有變更,則會重建整個數(shù)據(jù)庫。需要注意的時,由于重建數(shù)據(jù)庫會刪除所有的數(shù)據(jù),過于霸氣。因此不要輕易用于正式版本,使用時最好用DEBUG的宏把它括起來。

四、部署到其它數(shù)據(jù)庫

雖然默認(rèn)情況下會使用LocalDb或SqlExpress創(chuàng)建數(shù)據(jù)庫非常方便,但實際應(yīng)用中往往會要把它部署到指定的數(shù)據(jù)庫中的,要指定數(shù)據(jù)庫也非常簡單,只需要在app.config中添加配置即可(原來產(chǎn)生的默認(rèn)配置不用處理)。

????<connectionStrings>
? ? ? ? <add
? ? ? ? ? ? name="BloggingContext"
? ? ? ? ? ? providerName="System.Data.SqlClient"
? ? ? ? ? ? connectionString="Server=.\SQLEXPRESS;Database=Products;Trusted_Connection=true;"/>
? ? </connectionStrings>

這里一并給一個比較常用的MySql連接的示例:

????<connectionStrings>
????????<add?name="BloggingContext"?providerName="MySql.Data.MySqlClient"
? ?? ?? ?? ??connectionString="server=192.168.10.10;User Id=admin;password=test;database=BloggingContext;"?/>
? ??</connectionStrings>

需要注意的是,如果原來的數(shù)據(jù)庫存在的時候,往往會因為殘留的數(shù)據(jù)和自動映射的不一致而出現(xiàn)無法創(chuàng)建表或其它的異常,最好先把原有的數(shù)據(jù)庫給刪掉。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ASP.NET Core 使用Cookie驗證身份的示例代碼

    ASP.NET Core 使用Cookie驗證身份的示例代碼

    這篇文章主要介紹了ASP.NET Core 使用Cookie驗證身份的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Asp.net使用SignalR實現(xiàn)聊天室的功能

    Asp.net使用SignalR實現(xiàn)聊天室的功能

    這篇文章主要介紹了Asp.net使用SignalR實現(xiàn)聊天室的功能的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • 用類的繼承關(guān)系(重寫父類的方法)實現(xiàn)簡易后臺代碼模板

    用類的繼承關(guān)系(重寫父類的方法)實現(xiàn)簡易后臺代碼模板

    Asp.net的優(yōu)勢就在于快速構(gòu)建應(yīng)用,而對于一些最基礎(chǔ)數(shù)據(jù)的增刪改以及分頁事件或者樣式的設(shè)定可以通過在父類中寫上虛方法來供子類調(diào)用,接下來將為您測試一下用子類重寫父類的方法實現(xiàn)在模板的基礎(chǔ)上衍生變化
    2013-01-01
  • .NET中獲取程序根目錄的常用方法介紹

    .NET中獲取程序根目錄的常用方法介紹

    這篇文章主要介紹了.NET中獲取程序根目錄的常用方法有哪些,具體都有什么功能,需要的朋友可以參考下
    2014-06-06
  • ASP.NET?MVC創(chuàng)建XML文件并實現(xiàn)元素增刪改

    ASP.NET?MVC創(chuàng)建XML文件并實現(xiàn)元素增刪改

    這篇文章介紹了ASP.NET?MVC創(chuàng)建XML文件并實現(xiàn)元素增刪改的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • WPF實現(xiàn)ScrollViewer滾動到指定控件處

    WPF實現(xiàn)ScrollViewer滾動到指定控件處

    這篇文章主要為大家詳細(xì)介紹了WPF實現(xiàn)ScrollViewer滾動到指定控件處,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • ASP.NET靜態(tài)頁生成方法

    ASP.NET靜態(tài)頁生成方法

    這篇文章主要介紹了ASP.NET靜態(tài)頁生成方法,主要有讀取模板頁、匹配替換標(biāo)簽與生成新HTML頁等步驟,是asp.net項目開發(fā)中非常實用的技巧,需要的朋友可以參考下
    2014-11-11
  • Asp.net MVC中Razor常見的問題與解決方法總結(jié)

    Asp.net MVC中Razor常見的問題與解決方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Asp.net MVC中Razor常見的問題與解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • datatable行轉(zhuǎn)列示例分享

    datatable行轉(zhuǎn)列示例分享

    這篇文章主要介紹了datatable行轉(zhuǎn)列示例,指定需要轉(zhuǎn)換的表和轉(zhuǎn)換表表頭對應(yīng)舊表字段就可以轉(zhuǎn)換了
    2014-01-01
  • asp.net(C#)生成Code39條形碼實例 條碼槍可以掃描出

    asp.net(C#)生成Code39條形碼實例 條碼槍可以掃描出

    這篇文章主要介紹了asp.net(C#)生成Code39條形碼實例 條碼槍可以掃描出。需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02

最新評論

临城县| 芮城县| 定西市| 九江县| 广昌县| 临泽县| 姚安县| 清水河县| 华宁县| 澄城县| 孟津县| 读书| 宁国市| 禹城市| 贡山| 宜丰县| 岗巴县| 昌吉市| 万宁市| 洛南县| 元朗区| 云阳县| 金山区| 运城市| 托克逊县| 安仁县| 通化县| 德格县| 苏尼特左旗| 福州市| 房山区| 密山市| 微山县| 德庆县| 垣曲县| 周宁县| 团风县| 龙门县| 湖南省| 潮州市| 威海市|