写一个EF的CodeFirst的Demo
来源:互联网 发布:密度板的甲醛 知乎 编辑:程序博客网 时间:2024/05/02 01:13
转自:http://www.cnblogs.com/anmutu/p/3627247.html
今天打算写一个关于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类.其代码如下:
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFCodeFirstDemo1{ public class UserInfo { [Key] public int Id { get; set; } public string Name { get; set; } //一个可以有多个订单 public ICollection<Order> Orders { get; set; } }}
using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFCodeFirstDemo1{ public class Order { [Key] public int Id { get; set; } public string Context { get; set; } //一个订单只能有一个用户 public UserInfo UserInfo { get; set; } }}
感觉如果电脑ROM有4G可以考虑装上一个ReSharper的一个插件,是有利于开发的,比如当这两个类要给主键Id加上标签的时候,它会自动提醒我们要引什么,而我们要做的就是点一下就可以了引进了.也就是这样:
那么第一步创建实体就完成了.现在就是第二步了.创建上下文.创建上下文我们就写一个上下文的类,让之继承与DbContext,写一下这个类的构造函数,将value传进去,其中value就是配置文件中的连接数据库代码和一个关于驱动的一个代码.略要注意下其中对应关系.接着将实体放到集合里就可以了.其代码如下:using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFCodeFirstDemo1{ public class DemoDbContext:DbContext { public DemoDbContext() : base("name=Demo")//此与配置文件相对应. { } public DbSet<UserInfo> UserInfo { get; set; } public DbSet<Order> Orders { get; set; } }}
配置文件中的代码如下:
<?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.SqlConnectionFactory, EntityFramework" /> </entityFramework> <!--以下三行这就是自己写的配置文件,其要位于section下.不可改在其上面的--> <connectionStrings> <add name="Demo" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Cnbolgs;Integrated Security=True;" providerName="System.Data.SqlClient"/> </connectionStrings> </configuration>
在主函数里创建一个数据库,给表加点字段,测试一下成功了没.
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFCodeFirstDemo1{ class Program { static void Main(string[] args) { //创建上下文 DemoDbContext db = new DemoDbContext(); //创建数据库 db.Database.CreateIfNotExists(); //创建表且将字段加入进去 UserInfo userInfo = new UserInfo(); userInfo.Name = "du"; //将表加入到数据库中 db.UserInfo.Add(userInfo); //保存之 db.SaveChanges(); Console.WriteLine("成功创建数据库和表"); Console.ReadKey(); } }}
- 写一个EF的CodeFirst的Demo
- 使用EF codefirst时遇到的几个问题
- codefirst的一个总结
- EF CodeFirst 一对一关系、复杂类型的演变
- EF(EntityFramework) 的 CodeFirst 使用指南一(创建)
- EF(EntityFramework) 的 CodeFirst 使用指南二(基本使用)
- ef生成codefirst上下版本之间的迁移记录
- EF CodeFirst关于数据库的一些基本操作
- 小白对EF框架CodeFirst的理解
- EF中的来自数据库的EF设计器和来自数据库的CodeFirst的区别
- 实体框架 (EF) 入门 => 三、CodeFirst 支持的完整特性列表
- EF应用CodeFirst模式,数据迁移的基本用法要点摘记
- 【ITOO 3】.NET 动态建库建表:实用EF框架提供的codeFirst实现动态建库
- MusicStore 项目的完整配套视频-MVC项目示例分解-含些Jquery-EF CodeFirst-Razor
- EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)
- EF CodeFirst模式下,模型和业务逻辑处在不同项目的自动数据迁移实现
- EF应用CodeFirst模式,数据迁移的基本用法要点摘记
- 写了一个简单ResideMenu的Demo
- python自动kill掉长时间的S类php进程(centos7.0)
- 【BZOJ 4403】【推公式+Lucas定理】 序列统计
- 51nod1640 【最小生成树】
- php正则日记
- c语言实现进制转换器
- 写一个EF的CodeFirst的Demo
- Tesseract-OCR 训练自己的中文字库
- python 快速获取图片大小
- 贪心POJ3253
- nginx permission denied
- 51nod1459【二级最短路】
- ajax小结
- java常量池理解
- malloc、ralloc、calloc的原理,用法,作用,区别