在这篇文章中讲解如何使用EF的DbFirst模式实现数据的增删改查

一、新建控制台应用程序,然后右键->添加新建项,选择数据里面的实体数据模型:

然后点击添加

二、选择来自数据库的EF设计器,并点击下一步

三、在实体数据模型向导界面选择要使用的数据连接,或者点击新建连接按钮创建新的连接,这里选择已有的连接,并点击下一步:

四、选择实体框架6.0,点击下一步:

五、选择要操作的表,并点击完成:

六、查看生成的项目结构

自动添加了EntityFramework的引用。同时会在项目的根目录下面生成一个package文件夹:

package文件夹里面存放的是与EntityFramework有关的文件:

查看生成的配置文件:

ConfigSections节点里面有一个section段的name为entityFramework,下面有一个节点的名称就是该section段name的值。如果想在其他地方使用EF的配置信息,那么需要把configSections、connectionStrings、entityFramework三个节点都需要拷贝过去,并且configSections节点是在所有节点的最前面。

七、查看生成的edmx文件

1、查看.tt下面的文件

.tt文件下面生成的就是数据库表对应的实体类,并且是但是形式的。

2、查看.edmx文件

在edmx文件上面右键选择打开方式,选择XML(文本)编辑器方式打开:

文件的整个结构如下:

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="StudentSystemModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2012" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl">
<EntityType Name="Student">
<Key>
<PropertyRef Name="StudentID" />
</Key>
<Property Name="StudentID" Type="int" StoreGeneratedPattern="Identity" Nullable="false" />
<Property Name="StudentName" Type="varchar" MaxLength="16" />
<Property Name="Sex" Type="varchar" MaxLength="8" />
<Property Name="Age" Type="int" />
<Property Name="Major" Type="varchar" MaxLength="32" />
<Property Name="Email" Type="varchar" MaxLength="32" />
</EntityType>
<EntityContainer Name="StudentSystemModelStoreContainer">
<EntitySet Name="Student" EntityType="Self.Student" Schema="dbo" store:Type="Tables" />
</EntityContainer>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema Namespace="StudentSystemModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
<EntityType Name="Student">
<Key>
<PropertyRef Name="StudentID" />
</Key>
<Property Name="StudentID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="StudentName" Type="String" MaxLength="16" FixedLength="false" Unicode="false" />
<Property Name="Sex" Type="String" MaxLength="8" FixedLength="false" Unicode="false" />
<Property Name="Age" Type="Int32" />
<Property Name="Major" Type="String" MaxLength="32" FixedLength="false" Unicode="false" />
<Property Name="Email" Type="String" MaxLength="32" FixedLength="false" Unicode="false" />
</EntityType>
<EntityContainer Name="StudentSystemEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="Students" EntityType="Self.Student" />
</EntityContainer>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
<EntityContainerMapping StorageEntityContainer="StudentSystemModelStoreContainer" CdmEntityContainer="StudentSystemEntities">
<EntitySetMapping Name="Students">
<EntityTypeMapping TypeName="StudentSystemModel.Student">
<MappingFragment StoreEntitySet="Student">
<ScalarProperty Name="StudentID" ColumnName="StudentID" />
<ScalarProperty Name="StudentName" ColumnName="StudentName" />
<ScalarProperty Name="Sex" ColumnName="Sex" />
<ScalarProperty Name="Age" ColumnName="Age" />
<ScalarProperty Name="Major" ColumnName="Major" />
<ScalarProperty Name="Email" ColumnName="Email" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
<Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</Connection>
<Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
<DesignerProperty Name="EnablePluralization" Value="true" />
<DesignerProperty Name="IncludeForeignKeysInModel" Value="true" />
<DesignerProperty Name="UseLegacyProvider" Value="false" />
<DesignerProperty Name="CodeGenerationStrategy" Value="无" />
</DesignerInfoPropertySet>
</Options>
<!-- Diagram content (shape and connector positions) -->
<Diagrams></Diagrams>
</Designer>
</edmx:Edmx>

其中SSDL content定义的是数据库表的结构:

CSDL content定义的是实体类的结构:

C-S mapping content定义的是实体类和数据库表的映射关系:

从C-S mapping content节点中可以看出,EF为什么会自动生成实体类,或者通过实体类为什么能操作数据库的数据了。

从这里可以看出EF做的第一件事情:取数据库的数据表结构,生成实体类,在表和实体之间自动建立映射关系。

3、StudentManager.tt是T4模板,是用来生成实体类的模板。

T4模板:从edmx中取数据结构,按照模板生成对应格式的实体类。

4、StudentManager.Context.cs文件

//------------------------------------------------------------------------------
// <auto-generated>
// 此代码已从模板生成。
//
// 手动更改此文件可能导致应用程序出现意外的行为。
// 如果重新生成代码,将覆盖对此文件的手动更改。
// </auto-generated>
//------------------------------------------------------------------------------ namespace EFDbFirstDemo
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure; public partial class StudentSystemEntities : DbContext
{
public StudentSystemEntities()
: base("name=StudentSystemEntities")
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
} public virtual DbSet<Student> Students { get; set; }
}
}

StudentSystemEntities继承自DbContext,用来操作数据库。

Entity Framework应用:EntityFramework DataBase First模式的更多相关文章

  1. .NET Core学习笔记(8)——Entity Framework Core之Database First

    曾经我以为再也不会去弄啥Database First,然鹅我错了.这个世界上就是有啪啪打脸和真香的时候.当小伙伴拿着做好的DB表结构和SQL脚本递过来的时候,我知道我没法拒绝.望着他突起的肱二头肌和充 ...

  2. Entity Framework:三种开发模式实现数据访问

    原文地址 http://blog.csdn.net/syaguang2006/article/details/19606715 前言 Entity Framework支持Database First. ...

  3. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...

  4. Entity Framework应用:Code First模式数据迁移的基本用法

    使用Entity Framework的Code First模式在进行数据迁移的时候会遇到一些问题,熟记一些常用的命令很重要,下面整理出了数据迁移时常用的一些命令. 一.模型设计 EF默认使用id字段作 ...

  5. Entity Framework(EF的Database First方法)

    EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架.同其它ORM(如,NHibernate,Hibernate)一样, 一是为了使开 ...

  6. .NET E F(Entity Framework)框架 DataBase First 和 Code First 简单用法。

    EF是微软.NET平台官方的ORM(objet-relation mapping),就是一种对象-关系 映射,是将关系数据库种的业务数据用对象的形式表现出来,并通过面向对象的方式讲这些对象组织起来,实 ...

  7. 《ASP.NET MVC4 WEB编程》学习笔记------Entity Framework的Database First、Model First和Code Only三种开发模式

    作者:张博出处:http://yilin.cnblogs.com Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发 ...

  8. EF3:Entity Framework三种开发模式实现数据访问

    前言 Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样.三种开发模式各有优缺点,对 ...

  9. 【Entity Framework】Revert the database to specified migration.

    本文涉及的相关问题,如果你的问题或需求有与下面所述相似之处,请阅读本文 [Entity Framework] Revert the database to specified migration. [ ...

随机推荐

  1. Linux 系统结构详解【转】

    Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统.部分层次结构如图1-1所 ...

  2. elasticsearch 性能监控基础

    一.Elasticsearch 是什么 Elasticsearch是一款用Java编写的开源分布式文档存储和搜索引擎,可以用于near real-time存储和数据检索. 1.Elasticsearc ...

  3. [LeetCode] Contains Duplicate & Contains Duplicate II

    Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...

  4. 使用 Apache Commons CLI 开发命令行工具示例

    Apache Commons CLI 简介 Apache Commons CLI 是 Apache 下面的一个解析命令行输入的工具包,该工具包还提供了自动生成输出帮助文档的功能. Apache Com ...

  5. /etc/ssh/sshd_config 关建字:AllowUsers root test01

    新加用户,在AllowUsers 新增的用户名,重启sshd后,新增的用户才能登录服务器.

  6. 每日英语:Redfin Real-Estate Firm Gets Cold Shoulder in Silicon Valley

    "I used to think I was this made man," says entrepreneur Glenn Kelman. "That's what t ...

  7. linux命令(35):diff命令

    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...

  8. HTTP 代理服务器技术选型之旅

    HTTP 代理服务器技术选型之旅 背景 长期以来,贴吧开发人员多,业务耦合大,需求变化频繁,因此容易产生 bug.而我所负责的广告相关业务,和 UI 密切相关,一旦因为某种原因(甚至是被别人改了代码) ...

  9. deepNN

    不做卷积,只是增加多层神经网络层. #-*- encoding:utf-8 -*- #!/usr/local/env python import numpy as np import tensorfl ...

  10. 一文读懂BERT中的WordPiece

    1. 前言 2018年最火的论文要属google的BERT,不过今天我们不介绍BERT的模型,而是要介绍BERT中的一个小模块WordPiece. 2. WordPiece原理 现在基本性能好一些的N ...