EF-CodeFirst-基础
什么是Code-First
Code-First主要用于领域驱动设计。在Code-First方法中,专注于应用程序的域,先开始为域实体创建类,而不是先设计数据库,然后创建与数据库设计相匹配的类。下图说明了代码优先方法
如上图所示,EFAPI将根据域类和配置创建数据库。这意味着需要先编写域类,然后EF将从代码创建数据库
Code-First工作流程
创建或修改域类 - >使用Fluent-API或数据注释属性配置这些域类 - >使用自动迁移或基于代码的迁移来创建或更新数据库
在实际开发中体验Code-First
Code-First是EF拥抱DDD开发,支持POCO(Plain Old CLR Object)类型的开发模式
项目结构
- EntityFramework.Entity:领域实体,开始使用Code-First需要重点关注的一层
- EntityFramework.Print:控制台程序,用于测试输出
NuGet安装EntityFramework
因为Code-First是DDD的开发模式,所以一开始不需要先设计数据库,应该先设计项目的域类,首先在Entity层安装EF
这里安装的EF版本是6.x
设计域实体
创建数据上下文
创建的上下文类派生自DbContext,调用DbContext的构造函数,这里其实是设置数据库连接参数,DbContext类存在多个构造函数重载;如果不传参数,它会自定将数据库的名字命名为类库名.类名;如果只传了name相当于指定数据库名称,如果格式是"name=xxx"属于ConnectionString,会去配置文件读取
配置文件如下:在配置文件中配置数据库连接字符串(需要注意: 在app.config文件的configuration的节点下(不要在第一个节点下,否则报错)
程序调用
到现在为止,我只是创建了域类,并且没有对域类进行任何的配置(这里指使用EF中的注解DataAnnotation或者Fluent API),也没有创建数据库、表。现在使用看看
看下数据库
发现自动创建了数据库、表、字段、并且数据也成功写入了
这里引出一个概念:Conventions are sets of default rules which automatically configure a conceptual model based on your domain classes when working with the Code-First approach.
释义:约定是一组默认规则,在使用Code-First方法时会根据您的域类自动配置概念模型
Code-First约定在System.Data.Entity.ModelConfiguration.Conventions命名空间中定义
默认约定 | 描述 |
---|---|
架构 | 默认情况下,EF将所有数据库对象创建到dbo模式中 |
表名称 | EntityClassName +'s' |
主键名称 | EF将为名为Id或<实体类名> +“Id”(不区分大小写)的属性创建主键列 |
外键属性名称 | 默认情况下,EF将查找与主体实体主键名称相同名称的外键属性如果外键属性不存在,那么EF将在Db表中使用<依赖导航属性名称> +“_”+ <主体实体主键属性名称>创建一个FK列 |
空列 | EF为所有引用类型属性和可为空的基本属性创建一个空列,例如字符串,Nullable ,Student,Grade(所有类类型属性) |
不是空列 | EF为主键属性和非空值类型属性(例如int,float,decimal,datetime等)创建NotNull列 |
数据库列顺序 | EF将按照与实体类中的属性相同的顺序创建数据库列。但是,主键列会先移动 |
映射到数据库的属性 | 默认情况下,所有属性都将映射到数据库。使用该[NotMapped]属性从数据库映射中排除属性或类。 |
级联删除 | 默认情况下为所有类型的关系启用 |
SQL Server数据类型映射的C#数据类型
C# Data Type | Mapping to SQL Server Data Type |
---|---|
int | int |
string | nvarchar(Max) |
decimal | decimal(18,2) |
float | real |
byte[] | varbinary(Max) |
datetime | datetime |
bool | bit |
byte | tinyint |
short | smallint |
long | bigint |
double | float |
char | No mapping |
sbyte | No mapping(throws exception) |
object | No mapping |
总结:Code-First是领域驱动设计模式(DDD)一种体现,抛弃传统的从数据库设计开始,将关注点放在域模型上,根据域模型来创建数据库;针对域模型,EF提供默认的约定、DataAnnotation、Fluent API来对域模型进行配置。
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
EF-CodeFirst-基础的更多相关文章
- EF CodeFirst 基础命令
PM> enable-migrations 已在项目"EasyWeChat.Data"中启用迁移.若要覆盖现有迁移配置,请使用 -Force 参数. PM> add-m ...
- 新年奉献MVC+EF(CodeFirst)+Easyui医药MIS系统
本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新做了一下,业务逻辑简化了许多,旨在加深对mvc,ef(codefirst),easyui,AutoMap ...
- EF Codefirst 中间表(关系表)的增删改查(转)
EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD) 前言 此文章只是为了给新手程序员,和经验不多的程序员,在学习ef和lambada表达式的过程中可能遇到的问题. 本次使用订 ...
- 新年奉献MVC+EF(CODEFIRST)+EASYUI医药MIS系统(转)
出处:http://www.cnblogs.com/chenlinzhi/p/4332628.html 本人闲来无事就把以前用Asp.net做过的一个医药管理信息系统用mvc,ef ,easyui重新 ...
- EF CODEFIRST WITH ORACLE 存储过程
EF CODEFIRST WITH ORACLE 解决存储过程一直没找到解决方案 所以最后也没办法还是用了最基本的解决方案 采用Oracle.ManagedDataAccess提供的ADO基础访问类 ...
- 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...
- [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst
一.前言 从去年已经接触领域驱动设计(Domain-Driven Design)了,当时就想自己搭建一个DDD框架,所以当时看了很多DDD方面的书,例如领域驱动模式与实战,领域驱动设计:软件核心复杂性 ...
- [转]Using Entity Framework (EF) Code-First Migrations in nopCommerce for Fast Customizations
本文转自:https://www.pronopcommerce.com/using-entity-framework-ef-code-first-migrations-in-nopcommerce-f ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
- EF CodeFirst增删改查之‘CRUD’
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇旨在学习EF增删改查四大操作 上一节讲述了EF ...
随机推荐
- Git关于pull,commit,push的总结
以前总是由于自己的自身的原因,对于每一次的git的操作,我都是通过eclipse或者是idea来进行的,但是 我每一次都不是很清楚的关于这些方面的操作,现在我们来进行关于git bash的操作,正是由 ...
- (转载)完成端口(Completion Port, I/OCP)详解
http://www.cnblogs.com/lancidie/archive/2011/12/19/2293773.html 手把手叫你玩转网络编程系列之三 完成端口(Completion P ...
- CodeIgniter中使用CSRF TOKEN的一个坑
事情的经过是这样的,一个自动化扫描工具说我的代码中存在XSS漏洞,什么是XSS不懂的朋友可以看这里 我的代码里面开启CodeIgniter框架的CSRF Token,如下: 很简单,更多详情参考CI官 ...
- [Algorithm] Maximum Flow
Ref MIT: lecture-13-incremental-improvement-max-flow-min-cut/ Ford Fulkerson algorithm for finding m ...
- Java Annotation 应用 -- 导出Excel表格
相关知识链接: Introspector(内省) POI 1.声明注解 package com.ciic.component.excel; import java.lang.annotation.El ...
- Window应急响应(一):FTP暴力破解
0x00 前言 FTP是一个文件传输协议,用户通过FTP可从客户机程序向远程主机上传或下载文件,常用于网站代码维护.日常源码备份等.如果攻击者通过FTP匿名访问或者弱口令获取FTP权限,可直接上传 ...
- Use a load-balancer as a first row of defense against DDOS
We’ve seen recently more and more DOS and DDOS attacks. Some of them were very big, requiring thousa ...
- Django读取Mysql数据并显示在前端
一.首先按添加网页的步骤添加网页,我的网页名为table.html, app名为web table.html放到相应目录下, froms文件提前写好 修改views.py ? 1 2 3 4 5 6 ...
- C# Linq删除父级的同时删除子级
之前使用Include获取外键对象列表后,进行删除,一直报错操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null...后面还有一串.尝试了几种方式,比如将u.AlbumList=null ...
- Windows-NTFS-ADS在渗透测试中的利用
0.什么是ADS Windows:微软公司的一款视窗操作系统,其内核为WindowsNT. NTFS:WindowsNT环境的限制级专用文件系统. ADS:NTFS的系统特性,交换数据流(Altern ...