打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
写一个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 UserInfo11     {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 Order11     {12         [Key]13         public int Id { get; set; }14         public string Context { get; set; }15         //一个订单只能有一个用户16         public UserInfo UserInfo { get; set; }17     }18 }

      感觉如果电脑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:DbContext11     {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 Program10     {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算是成功的完成了.感觉写博客有点累的感觉.欢迎多提意见,共同进步.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Entity Framework 5.0系列之EF概览
.NET DDD 实战(1):前期准备之EF CodeFirst
让EF飞一会儿:如何用Entity Framework 6 连接Sqlite数据库
在Oracle中使用Entity Framework 6 CodeFirst
EF codefirst数据迁移
EF三种数据库操作模型比较
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服