写一个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的文章.的第四幅图和第五幅图,只是第五幅图选择空的实体模型.如此则会自动将我们所需要的程序集引进来.那么可以对比一下:
这是没引程序集的图:


接着就创建两个类,一个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 }
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 }

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算是成功的完成了.感觉写博客有点累的感觉.欢迎多提意见,共同进步.
浙公网安备 33010602011771号