Entity Framework学习
机械键盘侠
越学习越不懂
展开
-
初探EntityFramework——空Code First模型
如果不是从现有的系统升级,想要创建全新的项目可以从“空Code First模型开始”。“空CodeFirst模型”要先创建类,Visual Studio会从项目第一次执行的时候根据连接自动创建需要的数据库结构。本文将简单示例说明如何使用“空CodeFirst模型”。新建控制台应用程序,名叫CodeFirstE,如下图所示:右键点击项目,选择“添加”,然后是“新建...原创 2019-08-02 15:54:51 · 722 阅读 · 0 评论 -
EF中DB First模式下数据库中表结构变化时如何快速同步到EF模型中
没想到什么好的精准的办法,持续的报错,然后定位报错很是头疼。我目前感觉较快方式有两种,如果有更好的方式,请大家指教。一、先在数据库中修改表的结构属性,再删除edmx文件中对应的实体类模型,然后再是“从数据库更新模型”,新增删除的表的模型。二、还有一种方式是删除项目的所有EF模型,全部重新生成,干干净净,一了百了。...原创 2019-09-26 07:47:47 · 814 阅读 · 0 评论 -
EntityFramework进阶——Entity Splitting和Table Splitting
Entity Splitting——把单个实体拆分成多个表。Table Splitting——把单个表拆分成多个实体Entity Splitting下面通过例子来说明:假设存在如下实体类: public class Employee { public int EmployeeId { get; set; } public str...原创 2019-08-16 11:25:12 · 267 阅读 · 0 评论 -
EntityFramework进阶——继承
通过类型继承,我们可以更弹性地处理数据,有3中相关的技巧,即TPH,TPT,TPC。Table Per Hierarchy(TPH)当单个数据表存储不同数据类型时,在数据模型的设计上,可以使用Table Per Hierarchy(TPH,每个层次结构一张表)设计分割成数个不同的类型。在通过继承来建立彼此的关系。新建一个空的控制台项目:TPHDemo。添加如下几个实体类:...原创 2019-08-12 12:11:29 · 306 阅读 · 0 评论 -
EntityFramework进阶——事务
事务处理EF支持事务处理操作,以下语句会获取当前DbContext对象专用的DbContextTransaction事务处理的对象:DbContextTransaction transaction = context.Database.BeginTransaction()获取transaction之后,期间任何与context有关的数据均会被纳入此事务处理的范围。调用transa...原创 2019-08-14 10:57:49 · 300 阅读 · 0 评论 -
EntityFramework进阶——CodeFirst数据库迁移
与视觉操作界面相比,CodeFirst机制提供了一套命令行模式的迁移工具,协助开发人员有效的进行数据库与数据模型的同步维护操作。新建一个控制台项目CFMigrationsDemo,选用来自数据库的EF设计器模式,并向其中添加一个Product.cs类文件,如下图所示:public class Product{ public int Id { get; set; } p...原创 2019-08-19 11:32:13 · 523 阅读 · 0 评论 -
深入了解EntityFramework——Lazy Loading与Eager Loading
Lazy Loading:延迟加载。Eager Loading:贪婪加载。首先通过一个简单的控制台应用程序例子说明延迟加载:订单主表和订单从表,并且订单主表和订单从表是一对多的关系,代码如下图所示: //订单主表 public class Order { public int Id { get; set; } publi...原创 2019-08-09 16:40:52 · 1000 阅读 · 0 评论 -
EntityFramework进阶——数据变更冲突
TimeStamp更新操作可能伴随数据冲突,我们可以通过并发处理妥善解决这一方面的问题。避免数据冲突比较方便的做法是自动加入字节数组(byte[])类型的TimeStamp属性,对应到数据表中的rowvewsion类型字段,自动监控数据的更新操作。下面通过一个例子来说明:新建一个项目,名称为TimeStampDemo,新增实体类如下图所示: public class Pro...原创 2019-08-14 08:52:33 · 333 阅读 · 0 评论 -
深入了解EntityFramework——Fluent API
Fluent API除了惯例原则与属性数据注解外,FluentAPI是另一种支持实体类配置设置的方式。与属性数据注解相比,它提供了更广泛的功能与设置弹性。实体类若同时设置了数据注解,则采用的优先权是“Fluent API” > "数据注解" > "惯例"。一旦设置了Fluent API 无论数据注解还是惯例规则均会被覆盖。DbContext类定义的OnModelCreati...原创 2019-08-09 10:56:55 · 2474 阅读 · 0 评论 -
EntityFramework进阶——数据编辑与维护
实体数据对象状态在EF环境下,应用程序更改数据对象会引发数据集状态的变更,可能的状态有以下几种:数据对象状态列表 Added 添加实体对象创建到实体集中,数据未添加进数据库 Modified 实体对象已经存在于实体数据集中,数据库同时存在对应的数据,但某些实体对象属性值已经改变,未更新到数据库中 Deleted 实体对象已经存在于实体数据集中,数据库同时存在对应...原创 2019-08-13 15:40:42 · 500 阅读 · 0 评论 -
初探EntityFramework——来自数据库的Code First
Entity Framkwork从第二版(EF4)开始,支持新的CodeFirst模式(程序代码优先),以自定义类定义数据模型。简化了EF的开发过程。本文章使用简单的示例来说明如何使用来自数据库的CodeFirst模式。新建一个空的控制台应用程序,名叫CodeFirstDemo,如下图所示: 右击项目,在弹出的对话框中...原创 2019-08-02 12:45:59 · 1207 阅读 · 0 评论 -
初探EntityFramework——空EF设计器模型
如果没有任何现存数据库架构,可以使用空的EF设计器模型。本文将通过简单示例,了解如何使用空EF设计器模型。新建空的控制器应用程序EFDesignerDemo,如下图所示:在项目中右键,选择“添加”,然后是“新建项”,如下图所示: 然后选择“ADO.NET实体数据模型”,如下图所示:点击添加后,选...原创 2019-08-02 11:28:12 · 793 阅读 · 2 评论 -
初探EntityFramework——来自数据库的EF设计器
本文通过简单的示例,先初步了解下EF四种设计模式之一:来自数据库的EF设计器。来自数据库的EF设计器,顾名思义,需要有新建的数据库和表结构,才能生成EF设计器,在本地新建数据库KTStore,并且新建表Produtc,表结构及表中的数据如下图所示: 新建新的控制台应用程序:EFDemo,如下图所示...原创 2019-08-02 10:11:14 · 1276 阅读 · 0 评论 -
深入了解EntityFramework——数据注解属性
当惯例规则不符合设计需求时,我们可以使用数据注解配置打造更合适的数据库模型。本文根据示例项目对常用的数据注解属性做一个简要的举例说明。EFCodeFirst使用的约定大于配置的的编程模式,这种模式利用默认约定根据我们的领域模型建立概念模型。然我们可以用配置领域来覆盖默认约定。覆盖默认约定主要有两种手段:1、数据注解属性。2、FluentAPI。常用的数据注解属性 Key ...原创 2019-08-03 15:51:21 · 903 阅读 · 0 评论 -
初探EntityFramework——实体类结构映射
实体类与数据表的映射有一套专用的规则。Code First 采用的惯例优于预先设置的设计,在没有任何设置的情况下,自动检测模型结构并推导出默认设置以简化类的设计,因此不需要特别设置类的属性即可完成模型设计。例如,当DbContext的模型类中定义了DbSet<Product>属性时,按照惯例会以复数类名称为映射的数据表名称,因为Product自动映射到Products数据表。...原创 2019-08-03 14:48:52 · 959 阅读 · 0 评论 -
错误175:具有固定名称"MySql.Data.MySqlClient"的ADO.NET提供程序未在计算机或者应用程序配置文件中注册或者无法加载
背景:EF连接MySQL时报错,截图如下图所示:网上翻阅了很多资料,感觉有一篇文章说的比较靠谱:点击阅读。解决问题的大致过程如下:在尝试使用MySQL,ADO.NET(数据库优先)和EF6配置时报错。首先,我按照网上所描述安装了Connector / NET v6.8.X,但是还是不能解决。可以按如下步骤解决问题:1、安装“MySQL for Visual Studio”v...原创 2019-07-21 20:14:06 · 4298 阅读 · 0 评论 -
EF中报错:附加类型“xxxx”的实体失败,因为相同类型的其他实体已具有相同的主键值。
报错全文:附加类型“Model.DepartProduct”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态...原创 2019-10-08 16:09:13 · 1994 阅读 · 0 评论