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 ...
随机推荐
- 【iCore4 双核心板_FPGA】例程七:状态机实验——状态机使用
实验现象:按键每按下一次,三色LED改变一次状态. 核心代码: //--------------------module_rst_n---------------------------// modu ...
- 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-12底层驱动之液晶画点驱动
视频简介:该视频介绍iCore3应用开发平台中液晶驱动的方法. 源视频包下载地址:链接:http://pan.baidu.com/s/1qXQoOQo 密码:gvgo 银杏科技优酷视频发布区:http ...
- yum只下载软件不安装的两种方法
1 通过yum自带一个工具:yumdownloader rpm -qa |grep yum-utils yum -y install yum-utils* rpm -ql yum-utils 安装好后 ...
- MySQL 查询in操作,查询结果按in集合顺序显示
MySQL 查询in操作,查询结果按in集合顺序显示 select * from test where id in(3,1,5) order by find_in_set(id,'3,1,5'); ...
- 在Android 5.0中使用JobScheduler(转载)
翻译见:http://blog.csdn.net/bboyfeiyu/article/details/44809395 In this tutorial, you will learn how to ...
- CentOS 添加 Oracle YUM 源
最新文章:Virson's Blog 文章来自:Oracle 官方 YUM 源 Introduction The Oracle public yum server offers a free and ...
- Scala学习笔记——内建控制结构
Scala的内建控制结构包括:if.while.for.try.match和函数调用 1.if表达式 //常见的写法 var filename = "name" if (!args ...
- JQuery Easyui引入easyui-lang-zh_CN.js后出现乱码的问题解决方法
最近使用Easyui做项目,发现引入easyui-lang-zh_CN.js单元后页面会出现乱码,无论设置<meta>.还是Response都不能解决问题.用记事本打开easyui-lan ...
- windows下特殊字符无法用来命名
原则上可以利用键盘输入的英文字母.符号.空格.中文等均可以作为合法字符,但由于以下字符由系统保留它用,因此不能用在文件命名中: : / \ ? * “ < > | 注: ...
- ubuntu安装cocos2dx
操作系统:ubuntu16.04 LTSIDE:Code::blocks 16.01Cocos2dx版本:cocos2d-x 3.11.1这篇随笔将会简要地演示如何在ubuntu下安装cocos2dx ...