1、什么是CodeFirst
什么是CodeFirst,顧名思義,代碼優先,這是相對於以往開發時,先通過業務分析,再建庫建表,最后才對項目進行編碼。CodeFirst就是先寫代碼和數據模型,再讓EF通過數據模型生成DDL代碼,建立數據庫。
2、如何配置
首先,我們建立一個項目(我這里建立一個控制台程序)
右鍵點擊解決方案,然后選擇“管理NuGet程序包”
這里你會看到很多程序程序包,選擇EntityFramework,點擊安裝。
系統會自動的幫你部署好EF,呵呵,很方便的說。
我們打開配置文件APP.Config看看,代碼如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> </configuration>
多了一些配置信息(從項目建立開始,我一直都沒有動過配置文件),這些信息是EF部署的時候,系統自動幫你添加的,這里我采用的是VS2012自帶的LocalDB,數據庫的實例是mydb,所以,我只需要把“<parameter value="v11.0" />”中的V11.0改為mydb即可(這里無論是V11.0還是mydb都是數據庫實例,不是具體的數據庫名稱,因為數據庫等下是通過EF來自動幫我們生成的)
至此,我們EF CodeFirst就部署完畢啦。體會到了IDE的強大了吧~~
3、開始使用EF CodeFirst
這里,首先我建立兩個Model(稍微抄襲一下MSDN上面的教程,實在是想不出建立個什么樣的model好)
Model的代碼如下:
class Blog { public int BlogID { get; set; } public string BlogName { get; set; } }
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; } }
再建立一個上下文,這里我們繼承自DbContext(注意喲:這里需要引入程序集“System.Data.Entity”)
class BlogContext:DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } }
到這里,我們的EF CodeFirst基本上已經寫完了,剩下的就是在program里面寫一下調用的代碼。
class Program { static void Main(string[] args) { using (var blogDb = new BlogContext()) { Console.Write("Enter a name for a new blog:"); var blogName = Console.ReadLine(); var blog = new Blog { BlogName = blogName }; blogDb.Blogs.Add(blog); blogDb.SaveChanges(); var result = from b in blogDb.Blogs select b; foreach (var item in result) { Console.WriteLine(item.BlogName); } } Console.ReadKey(); } }
運行程序:
看來沒有什么問題,呵呵。我們再看看數據庫:
可以看出,多了個叫做“CodeFirst_2013_3_23.BlogContext”(名字起的有點長)的數據庫乖乖的躺在那里,而且表也建好了。
到這里為止,CodeFirst已經簡單的講解完畢。
下一節,我們討論:
如果我們的數據實體需要發生變化,比如添加一個新的數據庫實體,或者在已有的實體中添加/修改字段,我們需要怎么做?難道需要把數據庫刪掉,然后重新生成?
答案當然是:呵呵~~~