写一个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类.其代码如下:
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; }
}
}
UserInfo
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; }
}
}
Order
感觉如果电脑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();
}
}
}
主函数代码
运行,等了一会,我们终于看到了这句话:
然后查一个数据库,看下数据库中有没有相应的表和字段.结果是成功了的.因为:
那么,这个DEMO算是成功的完成了.感觉写博客有点累的感觉.欢迎多提意见,共同进步.
写一个EF的CodeFirst的Demo的更多相关文章
- 写一个兼容性比较好的拖拽DEMO
写一个兼容性比较好的拖拽DEMO 查看Demo 思路 div盒子 鼠标按下事件onmousedown 鼠标移动事件onmousemove,获得鼠标的坐标,将div移动至鼠标的当前坐标 鼠标抬起事件om ...
- EasyUI+MVC+EF简单用户管理Demo(问题及解决)
写在前面 iframe-src EntityFramework版本 connectionStrings View.Action.页面跳转 EasyUI中DataGrid绑定 新增.修改和删除数据 效果 ...
- 一个简单的Webservice的demo,简单模拟服务
前段时间一直在学习WCF,匆匆忙忙的把<WCF全面解析>和<WCF服务编程>看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了.回顾了一 ...
- 分享Mvc3+NInject+EF+LigerUI权限系统Demo
前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统,这个权限系统具有 组织结构.用户.角色.菜单,组织结构下挂用户, ...
- EF架构~codeFirst从初始化到数据库迁移
一些介绍 CodeFirst是EntityFrameworks的一种开发模式,即代码优先,它以业务代码为主,通过代码来生成数据库,并且加上migration的强大数据表比对功能来生成数据库版本,让程序 ...
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...
- 怎样写一个webpack loader
div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...
- 一个简单的Webservice的demo(中)_前端页面调用
首先新建项目,这里有两种调用方式,为了能方便理解,新建页面WebserviceTest如下图: 先引用写好的服务,这里用上次写好的服务.见上次写的一个简单的Webservice的demo,简单模拟服务 ...
- 用H5和js写一个移动端自定义播放器
前言 由于html5自带的播放器样式不怎么好看,大多数人都是自己写一个来满足业务需求.这一次的需求如下: 1.不要上一曲下一曲 2.有进度条和播放暂停按钮 3.有时间显示 demo实现功能 1.进度条 ...
随机推荐
- 自定义input file 属性
<label class="input"><input title="浏览文件" type="file" />浏览… ...
- iOS 获取设备的ip地址
导入以下头文件 #include <ifaddrs.h> #include <arpa/inet.h> 通过下面方法即可获取ip地址+ (NSString *)getIpA ...
- android APP是否需要缓存?+简单架构
问题的由来 昨天,当我写完我的第一篇博客之后,我便百无聊赖的玩起了手机!当我打开Google自带的一些app的时候,发现他们直接叫我连接网络,并没有缓存上次从网络获取的数据.这就让我感到很奇怪!于是我 ...
- DWZ (JUI) 教程 DWZ中dialog层的刷新
在DWZ开发过程中经常会遇到的一种情况就是:在navTab页面中通过a标签打开一个dialog,在dialog层进行操作后,需要对该dialog层进行必要的刷新操作. 1.首先讲一下思路: 在非dia ...
- 运行第一个Node.js程序
初学Node.js,萌新一枚.感觉Node.js挺不错的,从基础开始一步一步来,加油吧! 我们来使用Node.js的express来运行第一个程序helloworld: 在命令提示符键入express ...
- 【学习笔记】【C语言】char类型
1. 存储细节 ASCII单字节表(双字节GBK\GB2312\GB18030\Unicode) 2. 常见错误 char c = A; char c = "A"; char c ...
- ajax 返回数据 无法得到其属性的解决办法
当我们用ajax无法 得到其属性.正常情况下是: <script type="text/javascript"> function useAjax(sen ...
- 20141124-HTML-JavaScrilpt
JavaScript JavaScript(简称JS),他是一门HTML的脚本语言,用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. 他的用法及语法类似于Visual Stud ...
- input中的id和name
name在以下用途是不可替代的: 1. 表单(form)的控件名,提交的数据都用控件的name而不是id来控制.因为有许多name会同时对应多个控件,比如checkbox和radio,而id必须是全文 ...
- format——MATLAB
format:设置输出格式 对浮点性变量,缺省为format short. format并不影响matlab如何计算和存储变量的值.对浮点型变量的计算,即单精度或双精度,按合适的浮点精度进行,而不论变 ...