zoukankan      html  css  js  c++  java
  • EF-CodeFirst-基础

    什么是Code-First

    Code-First主要用于领域驱动设计。在Code-First方法中,专注于应用程序的域,先开始为域实体创建类,而不是先设计数据库,然后创建与数据库设计相匹配的类。下图说明了代码优先方法

    Code-First

    如上图所示,EFAPI将根据域类和配置创建数据库。这意味着需要先编写域类,然后EF将从代码创建数据库

    Code-First工作流程

    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 TypeMapping 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;">

  • 相关阅读:
    在ubuntu下安装phpmyadmin 出现404错误
    Jquery插件收藏
    PHP 时区设置
    Jquery动态进行图片缩略
    CSS设置图片垂直居中的方法
    解决CI框架的Disallowed Key Characters错误提示
    @Component默认是单例还是多例?
    ehcache的heap、off-heap、desk浅谈
    nginx负载均衡分配策略有哪些?
    HashSet的实现原理,简单易懂
  • 原文地址:https://www.cnblogs.com/GnailGnepGnaw/p/9167459.html
Copyright © 2011-2022 走看看