寫一個EF的CodeFirst的Demo


                                 寫一個EF的CodeFirst的Demo

      今天打算寫一個關於EF的CodeFirs的一個小Demo.先略說一個EF的三種與數據庫,怎么說,叫映射么,好吧,那就這么叫吧,就是一個是ModelFirst就是是在模型先行,直接在VS里添加模型然后再加入(或者說是映射)到數據庫中,一個是DBFirst就是數據庫先行,先在數據庫中設計表等.最后一個就是CodeFirst或者就確切的是叫CodeOnly,就是只寫代碼就可以了.不用在數據庫里設計表也不用在VS里設計模型.就可以做到只寫代碼就可以設計數據庫了.依舊如是,我寫的都是很簡單的東西,大牛神馬的自然可以路過不看,另外小伙子我貌似需要鼓勵的節奏,如若不喜,磚頭還請不要扔太多的節奏.願共同進步.

      CodeFirst總的來說是分為兩步,第一步就是創建實體,第二步就是創建EF的上下文.

      那么最開始呢,我們是創建一個項目,然后引進EF的一些程序集,有了此程序集才能有一些EF的操作,比如當我們寫創建EF的上下文的時候有了此程序集才能繼承DbContext.第一種引用的方法自然是我們平時的點引用,然后找或者瀏覽什么的引用進來,我這里就不這么找了,使一個小招,就是我們可以在這個項目中創建一個空的ADO.NET實體模型,自然是創建一個空的就行了.如若需要圖可參見我的上一篇文章,關於EF+MVC的一個快速CRUD的文章.的第四幅圖和第五幅圖,只是第五幅圖選擇空的實體模型.如此則會自動將我們所需要的程序集引進來.那么可以對比一下:

      這是沒引程序集的圖:

    下面就是引入了程序集的圖(其中Model.edmx是可以刪除掉的,因為它已經沒有什么價值了):

        接着就創建兩個類,一個UserInfo類和一個Order類.其代碼如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel.DataAnnotations;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace EFCodeFirstDemo1
 9 {
10    public  class UserInfo
11     {
12        [Key]
13        public int Id { get; set; }
14        public string Name { get; set; }
15        //一個可以有多個訂單
16        public ICollection<Order> Orders { get; set; } 
17     }
18 }
UserInfo
 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel.DataAnnotations;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace EFCodeFirstDemo1
 9 {
10     public class Order
11     {
12         [Key]
13         public int Id { get; set; }
14         public string Context { get; set; }
15         //一個訂單只能有一個用戶
16         public UserInfo UserInfo { get; set; }
17     }
18 }
Order

      感覺如果電腦ROM有4G可以考慮裝上一個ReSharper的一個插件,是有利於開發的,比如當這兩個類要給主鍵Id加上標簽的時候,它會自動提醒我們要引什么,而我們要做的就是點一下就可以了引進了.也就是這樣:

      那么第一步創建實體就完成了.現在就是第二步了.創建上下文.創建上下文我們就寫一個上下文的類,讓之繼承與DbContext,寫一下這個類的構造函數,將value傳進去,其中value就是配置文件中的連接數據庫代碼和一個關於驅動的一個代碼.略要注意下其中對應關系.接着將實體放到集合里就可以了.其代碼如下:     

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data.Entity;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace EFCodeFirstDemo1
 9 {
10     public class DemoDbContext:DbContext
11     {
12         public DemoDbContext() : base("name=Demo")//此與配置文件相對應.
13         {
14             
15         }
16         public DbSet<UserInfo> UserInfo { get; set; }
17         public DbSet<Order> Orders { get; set; }
18     }
19 }
上下文的代碼

      配置文件中的代碼如下:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <configuration>
 3   <configSections>
 4     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 5     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 6   </configSections>
 7   <startup>
 8     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
 9   </startup>
10   <entityFramework>
11     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
12   </entityFramework>
13   
14   <!--以下三行這就是自己寫的配置文件,其要位於section下.不可改在其上面的-->
15   <connectionStrings>
16     <add name="Demo" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Cnbolgs;Integrated Security=True;" providerName="System.Data.SqlClient"/>
17   </connectionStrings>
18   
19 </configuration>
配置文件的代碼

     在主函數里創建一個數據庫,給表加點字段,測試一下成功了沒.

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace EFCodeFirstDemo1
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             //創建上下文
14             DemoDbContext db = new DemoDbContext();
15             //創建數據庫
16             db.Database.CreateIfNotExists();
17             //創建表且將字段加入進去
18             UserInfo userInfo = new UserInfo();
19             userInfo.Name = "du";
20             //將表加入到數據庫中
21             db.UserInfo.Add(userInfo);
22             //保存之
23             db.SaveChanges();
24             Console.WriteLine("成功創建數據庫和表");
25             Console.ReadKey();
26         }
27     }
28 }
主函數代碼

    運行,等了一會,我們終於看到了這句話:

      然后查一個數據庫,看下數據庫中有沒有相應的表和字段.結果是成功了的.因為:

      那么,這個DEMO算是成功的完成了.感覺寫博客有點累的感覺.歡迎多提意見,共同進步.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM