ORM系列之二:EF(4) Model First
ORM系列之二:EF(4) Model First
前面我们已经介绍过EF中Code First开发模式,简而言之,就是不管三七二十一直接写代码,不过对于很多开发人员来说,可能并不习惯这样来开发,并且安装标准的开发流程,应该是先建模再进行编码,当然EF也是支持这样做的,那我们今天就简单介绍一些现有模型的开发模式——Model First。
具体步骤如下:
1. 新建一个控制台程序,叫做“EF.ModelFirstSample”。
2.安装EF,因为我们之前已经安装了EF,所以打开NuGet包管理器界面直接安装到新的工程中,如果没有安装,要自己去安装。
3.创建模型
新增“现有项”,选中“数据”下的“ADO.NET实体数据模型”。
从打开的窗体中,选择“空EF设计器模型”。
完成之后,我们就可以看到EF的模型设计器面板,右键,新增实体,输入如下信息:
选中Blog实体,右键添加两个属性,分别为Name和Url,完成之后如下:
参照上述步骤,新增Post实体,并且添加Title和Content属性,再在设计面板上右键为Blog和Post实体增加关联关系,如下:
4.生成数据库
至此,我们的简单模型已经设计好,现在可以在设计面板右键,点击“根据模型生成数据库”
在弹出的窗体中配置好连接的数据库
一切顺利的话,点击“下一步”,此时就可以看到建表语句了,如下图:
点击完成之后,我们可以在vs新打开的窗体中可以看到最终生成SQL语句,这个时候只是生成了SQL语句,但是并没有真正执行,还需要手动点击一下执行:
OK,我们的模型已经成功创建。
5.读写测试
我们已经有了模型,并且基于此模型已经生成好了数据库,现在可以根据这个模型进行读写操作。
下面代码,主要是向Blog表中插入一条数据,并且读取出来,具体代码实现如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace EF.ModelFirstSample {class Program{static void Main(string[] args){using (var db = new BlogModelContainer()){ var blog = new Blog { Name = "test Name",Url="testUrl" };db.BlogSets.Add(blog);db.SaveChanges();var query = from b in db.BlogSetsorderby b.Nameselect b;foreach (var item in query){Console.WriteLine(item.Name);}Console.ReadKey();}}} }
![](/assets/blank.gif)
运行之后我们去数据库查看,可以发现已经成功添加了一条记录,并且成功读取。
6.处理模型改变
Model First模式下的模型改变之后,只需要在设计面板中右键点击“根据模型生成数据库”,和之前生成数据库一样,生成脚本之后要手动执行。
如上是为Blog增加一个Author属性,更新的数据库Blog中可以看到多出一个Author字段。
ORM系列之二:EF(4) Model First相关推荐
- 自定义ORM系列(三)工具雏形及基本用法
引言 本篇给大家介绍我这个工具的雏形结构,以及基本的用法,还请大家多提意见. 初看起来,这个有点像NHibernate.说到这里,肯定有人要拍砖了.其实,我也知道.我这个不入流的东西,和NHibern ...
- ORM系列之Entity FrameWork详解
一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQ ...
- 【转】ORM系列之Entity FrameWork详解
一. 谈情怀 从第一次接触开发到现在(2018年),大约有六年时间了,最初阶段连接数据库,使用的是[SQL语句+ADO.NET],那时候,什么存储过程.什么事务 统统不理解,生硬的将SQL语句传入SQ ...
- 《解剖PetShop》系列之二
PetShop数据访问层之数据库访问设计 <解剖PetShop>系列之二 二.PetShop数据访问层之数据库访问设计 在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的 ...
- [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店...
原文:[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店 一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Bytear ...
- anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾
前段时间,YOLOv4&v5大火,很多人忽视了yolov5在anchor上的一些细节变化,因此,本文从Faster RCNN着手,逐步分析SSD.YOLOv4&v5的anchor机制. ...
- html中地图的绘制toolbars,tkinter内嵌Matplotlib系列(二)之函数曲线绘制
目录 前言 前一章节,我们解读了tkinter内嵌Matplotlib的教程,了解其内嵌的原理,就是在tkinter创建matplotlib的画布控件,再利用其返回的画布对象进行绘图,其他附加功能,使 ...
- MongoDB实战系列之二:MongoDB的常用操作
#以服务方式启动mongodb,要求验证 /elain/apps/mongodb/bin/mongod --fork --port 27001 --auth --dbpath /elain/data/ ...
- 配分函数|机器学习推导系列(二十六)
一.概述 对于有向概率图模型来说,由于图中存在天然的拓扑排序关系,所以有向概率图的因式分解的形式很容易写出来.而对于无向图来说就需要根据它图中的最大团来写成一个因式分解的形式,无向图模型在局部并没有表 ...
最新文章
- 动态调用WCF不添加服务(svcutil.exe)
- MongoDB数据库的创建与删除
- USACO4.12Beef McNuggets(背包+数论)
- 对象的单数组表示(用单数组实现链表-不一样的链表实现)
- Leetcode每日一题:148.sort-list(链表排序)
- SQL Server 时间戳与时间格式互相转换
- linux设备模型之tty驱动架构分析,linux设备模型之uart驱动架构分析
- C 标准库中输出到字符串、到文件的相关函数
- Android 声音采集回声与回声消除
- Xmind 2022 Mac版 思维导图软件
- java EE crm代码_基于jsp的小型企业CRM-JavaEE实现小型企业CRM - java项目源码
- Topaz Mask AI 1.3.7汉化版|AI人工智能抠图插件Topaz Mask AI 1.3.7中文版
- FigDraw 20. SCI文章中绘图之马赛克图 (mosaic)
- 对ORBslam2前端ORBextractor点提取的理解(理解每行代码在干啥)
- 合泰杯——合泰单片机工程7之PWM输出
- 点击网页上的联系我们弹出QQ对话框的实现
- 建筑制图计算机辅助设计,计算机辅助设计AutoCAD建筑制图中绘制技巧研究.doc
- c语言里面log函数怎么用
- Vue实战:vuex的五个基本属性和用法
- 在ESXi上部署虚拟机