Entity Framework入门
Entity Framework入门
准备工作
如果使用的visual studio 2010,可安装NuGet Package Manager
包管理工具
然后使用NuGet程序包管理器来安装 EntityFramework
。安装之后,引用中就存在 EntityFramework
三种不同的approach:
- Database First-参考Part 1 - What is Entity Framework,
Database First
从一个已存在的数据库逆向生成一个模型 - Model First-参考Part 2 - Entity Framework Model First Approach,
Model First
从EF设计器中创建的模型生成数据库 - Code First-参考Part 3 - Entity Framework Code First Approach
推荐教程:
- 《Entity Framework 6 Recipes》中文翻译系列
基础
上下文对象
上下文对象(context object)的。上下文对象是实体框架服务的入口,它暴露实体对象,管理数据库连接,生成参数化的SQL语句,从数据库中封送(marshals)数据或封送数据到数据库,缓存对象,维护对象变化跟踪,把无类型的结果集转换到一个强类型的集合对象。
一开始,上下文对象为ObjectContext
对象,现在,实体框架支持另一个最新的名为DbContext
的上下文对象。DbContext
大大简单化了使用实体框架的体验。有趣的是,DbContext
是ObjectContext
的一个包装器或者外观实现者。以一种直观的、友好的、有效的方式暴露底层ObjectContext
的功能。
Model First
Model First首先创建Entity Model,包括
1.Entites
2.Entites之间的关系
3.继承层级等
如下,在设计器中创建好实体模型EmployeeModel.edmx
然后,在设计页面上选择”根据模型生成数据库”,选择”您的数据库连接”后,生成EmployeeModel.edmx.sql
,其中的SQL包括:
1.创建对应的表
2.创建主键、外键
3.创建索引
在EmployeeModel.edmx.sql
中,右键”执行SQL”,执行SQL语句
Code First
Code First允许我们先创建自定义的类,然后Entity Framework会基于这些自定义的类来自动生成数据库
具体的例子请参考Part 3 - Entity Framework Code First Approach
自定义表名、列名和外键名
上面使用Code First来生成了Departments
和Employees
表。注意Employees
表Department_Id
列名,有一个下划线。如果要使列名没有下划线该怎么呢?
使用System.ComponentModel.DataAnnotations.Schema
命令空间的ForeignKey
属性
同样,为自定义表名和列名,也可进行类似的操作。
[Table("tblEmployees")]
public class Employee
{public int Id { get; set; }[Column("First_Name")]public string FirstName { get; set; }public string LastName { get; set; }public string Gender { get; set; }public int Salary { get; set; }public int DepartmentId { get; set; }[ForeignKey("DepartmentId")]public Department Department { get; set; }
}
数据库创建后如何处理模型的变化
参考Part 5 - How to handle model changes in entity framework
如果在Employee
类中添加一个新的属性
public string JobTitle { get; set; }
此时运行程序,提示如下的错误:
The model backing the 'EmployeeDBContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
这是因为创建数据库后,模型(即Employee
类)已更改。这意味着模型和数据库不再同步,因此会报错。entity framework使用自动生成的__MigrationHistory
表,检查创建数据库后模型是否已更改。
为了解决这个错误,我们必须告诉实体框架当模型改变时该怎么做?
添加一个Global.asax
文件,在Application_Start()
方法中,添加如下的代码,表示model改变后,Entity framework会删除并重新创建数据库
protected void Application_Start(object sender, EventArgs e){Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EmployeeDBContext>());}
另一种方式是,总是删除并重新创建数据库
Database.SetInitializer(new DropCreateDatabaseAlways<EmployeeDBContext>());
Entity Framework入门相关推荐
- ADO.NET Entity Framework 入门示例向导(附Demo程序下载)
ADO.NET Entity Framework 入门示例向导(附Demo程序下载) ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架, ...
- ADO.NET Entity Framework 入门示例
ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据.实体框架Entit ...
- .NET Entity Framework入门简介及简单操作
Entity Framework是微软借鉴ORM思想开发自己的一个ORM框架. ORM就是将数据库表与实体对象(相当于三层中的Model类)相互映射的一种思想. 最大的优点就是非常方便的跨数据库平台. ...
- Entity Framework入门教程:创建实体数据模型
下图为一个已经创建好的数据库表关系 实体数据模型的创建过程 在Visual Studio项目中,右键程序集菜单,选择[添加]->[新建项],在[添加新项窗口]中选择[ADO.NET实体数据模型] ...
- ASP .NET MVC 之Entity Framework入门教程及源码
本文主要的目的是 1. 说明Entity Framework Power Tools如何使用. 2. Entity Framework 快速门 实验环境: OS: Windows Server 20 ...
- ef6 oracle 存储过程,Entity Framework入门教程(14)---DbFirst下的存储过程
EF6中DbFirst模式下使用存储过程 我们已经知道EF可以将L2E或Entity SQL的查询语句自动转换成SQL命令,也可以根据实体的状态自动生成Insert/update/delete的Sql ...
- 什么是Entity Framework(EF)
Entity Framework入门教程(1)---Entity Framework简介 阅读目录 什么是Entity Framework 1.EF的概念 2.EF功能汇总 3.EF组成 回到顶部 什 ...
- ADO.NET Entity Framework Beta2(五)/快速入门(实体框架)
This quickstart illustrates a series of tasks that support the topics in Getting Started with the En ...
- ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework
文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-ef-6-get-started-model.html 上一节:ASP.NET MVC ...
- ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门
ASP.NET Core 入门教程 8.ASP.NET Core + Entity Framework Core 数据访问入门 原文:ASP.NET Core 入门教程 8.ASP.NET Core ...
最新文章
- C# 4.0 新特性之并行运算(Parallel)
- mongodb分片介绍—— 基于范围(数值型)的分片 或者 基于哈希的分片
- Iframe中的SSRS报表中使用windows.open在新窗口中不能打开URL中的问题
- SharedPreferences记住用户密码 态判断应用是否首次启动等
- 【图像分割】图像分割专栏栏主自述:分割,我们究竟在研究什么?
- 访问域名不走dns服务问题排查,报错could not resolve host
- android webviwe 头布局,Android布局问题,带有WebView下方的按钮
- VB2010 的隐式续行(Implicit Line Continuation)
- 前端学习(1915)vue之电商管理系统电商系统之通过路由展现权限列表
- PyChram使用技巧
- 前魅族副总裁李楠上手魅族17:颜值提升了
- BZOJ2820:YY的GCD
- R中的 url编码 和 解码
- 构建一套完整高效的供应链系统体系
- 网络协议学习(B站观看最多)
- Java后端进行Base64码加密、解密及MD5加密
- 笔记本CPU忽高忽低问题的解决
- WordPress中文汉字用户名不能注册怎么办?
- jqweui引入的标签
- C# 淘宝数据包下载,生成csv格式。可直接通过淘宝助理上传到淘宝店铺
热门文章
- R语言函数-tolower
- SAC案例精选:SAC Planning实现SOP(销售与运营计划)模拟沙盘
- Vue——Module build failed: TypeError: loaderContext.getResolve is not a function错误解决
- 阿里校招应届生面试经验
- 后端使用postman进行测试
- Spring 中 配置文件 加入 aspectj-autoproxy 项目报错
- 沥青路面粘弹性力学分析基础研究
- cacti graphs new.php,Cacti /graphs_new.php SQL Injection Vulnerability
- git提交,安装配置 commitizen cz-conventional-emoji $git cz代替$git commit
- 读《虚幻引擎程序设计浅析》笔记