ef

前言 -- 数据库准备、一些名词准备

佐手、 提交于 2020-04-07 06:35:49
前言 本系列整理自 EF 实体框架入门 。 数据库准备 该系列用到的数据库为 school,使用SQL Server。如果没有安装,可以使用VS附带的SQL Express。步骤省略,不清楚的可以使用“靠谱的”搜索引擎查找。 SQL脚本: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- 创建 Department 表。 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]') AND type in (N'U')) BEGIN CREATE TABLE [dbo].[Department]( [DepartmentID] [int] NOT NULL, [Name] [nvarchar](50) NOT NULL, [Budget] [money] NOT NULL, [StartDate] [datetime] NOT NULL, [Administrator] [int] NULL, CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED ( [DepartmentID] ASC )WITH (IGNORE_DUP_KEY = OFF) ON

EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子

孤街浪徒 提交于 2020-04-07 05:55:13
EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子 本章节讲解EF里的继承映射关系,分为TPH、TPT、TPC。具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discriminator列用来区分基类和子类的数据。新建一个度假村Resort实体类试试: /// <summary> /// 度假村类 /// </summary> public class Resort : Lodging //这里继承了Lodging类 { public string Entertainment { get; set; } //娱乐 public string Activities { get; set; } //活动 } 之前的住宿类Lodging里有个属性IsResort表示是否度假胜地,现在可以注释掉了,有新的类Resort来继承Lodging表示是否是度假胜地了,跑下程序最终会生成一张表: 并没有生成Resorts表,而是把Resrot实体类里的属性生成到了Lodgings表里。多了一列discriminator,这个是默认的,用来表示数据来自哪个类,继续添加一个插入Lodging表数据的方法: private static void InsertLodging() { var lodging =

给 EF Core 查询增加 With NoLock

大城市里の小女人 提交于 2020-04-03 02:13:31
给 EF Core 查询增加 With NoLock Intro EF Core 在 3.x 版本中增加了 Interceptor ,使得我们可以在发生低级别数据库操作时作为 EF Core 正常运行的一部分自动调用它们。 例如,打开连接、提交事务或执行命令时。 所以我们可以自定义一个 Interceptor 来记录执行的 sql 语句,也可以通过 Interceptor 来实现 sql 语句的执行。 这里我们可以借助 Interceptor 实现对于查询语句的修改,自动给查询语句加 (WITH NOLOCK) , WITH NOLOCK 等效于 READ UNCOMMITED (读未提交)的事务级别,这样会造成一定的脏读,但是从效率上而言,是比较高效的,不会因为别的事务长时间未提交导致查询阻塞,所以对于大数据场景下,查询 SQL 加 NOLOCK 还是比较有意义的 NoLockInterceptor 继承 DbCommandInterceptor ,重写查询 sql 执行之前的操作,在执行 sql 之前增加 WITH(NOLOCK) ,实现代码如下: public class QueryWithNoLockDbCommandInterceptor : DbCommandInterceptor { private static readonly Regex

IP

只愿长相守 提交于 2020-03-21 03:05:28
(1)IP是TCP/IP族的最核心的协议,所有的TCP、UDP、ICMP、IGMP数据都以IP数据报格式传输。它的特点是: 《1》不可靠。IP是不可靠传输协议,不能保证数据包能到达目的地。 《2》无连接。意思是无需维护发送后的状态,它到达目的地可以是无序或者每个包走不同的线路。 (2)IP首部: 《1》版本:4bit,V4,V6 《2》首部长度:4bit,负责表示整个IP头部的大小。 《3》TOS:8bit。分别依次为:3bit的IP proity(值越大约优先),4bit依次为最小延迟、最大吞吐量、最高可靠性和最小费用,以及1bit的未用位。   后来由于被RFC 2474重新定义为Diffserv:前6bit为DSCP,后2bit为ECN(显式拥塞通告) 加插解释: DSCP:差分服务代码点 AF--确保转发 EF--加速转发 BE--尽力服务 AF11、12、13;AF21、22、23;AF31、32、33、AF41、42、44;EF 第一个数字表示优先级,第二个表示丢包标准(low、Medium、High)。EF是最高级 例如EF代表语音流量、AF11为FTP流量 最后2bit的ECN段: 00--不支持ECN传输 10--支持ECN传输 01--支持ECN传输 11--拥塞 如果发送方在发送给接收方的包在路上的一台设备出现拥塞时,ECN置11,当接收方收到后看到是11

在VS中安装EF和项目引用EF

走远了吗. 提交于 2020-03-19 04:46:20
1.通过Visual Studio安装NuGet (1). 打开Visual Studio扩展管理器 (2). 选择联机库,并在搜索中写入NuGet,然后点击搜索结果中NuGet Package Manager后的下载 (3).找到时,点击下载 2.安装EF (1).打开NuGet程序包管理器->程序管理器控制台 (2)在PM>中输入 install-package entityframework,当出现下面提示,表示已安装成功! 3.安装 4. 项目引用EF (1).例如:Simple.Common需要引用EF,在解决方案上右键点击 “管理解决方案的 NuGet程序包”,如下图: 在已安装的包里面找到 EF,点 "管理" 按钮,找到项目,在前面打上勾即可。 在使用时,如下图可以批量生成实体。 来源: https://www.cnblogs.com/flyerca/p/5320457.html

Entity Framework 系统约定配置

南笙酒味 提交于 2020-03-19 00:33:53
前言 Code First之所以能够让开发人员以一种更加高效、灵活的方式进行数据操作有一个重要的原因在于它的约定配置。现在软件开发越来越复杂,大家都试图将软件设计的越来越灵活,很多内容我们都希望是可配置的,但是过多的配置也会带来很大的工作量,解决这个问题的方法就是约定。对于一些简单的,不太可能经常变化的内容我们以一种约定的方式进行设计。使用过其他ORM框架的朋友可能知道一般ORM都有对应的映射配置文件(一般是一个Xml文件),但是EF并没有。在EF中是以一种约定的方式进行表、列同实体类进行映射的,与此同时为了提高最大的灵活性EF中可以通过Fluent API和Data Annotations两种方式对映射进行灵活配置。 Entity Framework 默认约定 1.将数据类的类名复数形式作为数据表名称,并且使用“dbo”作为默认架构。   例如定义一个Person数据类,那么将会自动生成“dbo.Persons”表。 2.将数据类中的“ID”属性或者“<类名>+ID”作为主键(不区分大小写),并且如果该列为数值类型或者GUID列将作为标识列。   例如在Order类中如果有ID或者OrderID属性将默认作为主键,二者均出现优先使用 “ID”属性。 3.使用导航属性约束两个表之间的关系,在从表数据类中除了导航属性,推荐定义一个外键属性在从表数据类中(如果不指定将默认生成一个“

Entity Framework 系统约定配置

。_饼干妹妹 提交于 2020-03-15 01:40:13
原文: Entity Framework 系统约定配置 前言 Code First之所以能够让开发人员以一种更加高效、灵活的方式进行数据操作有一个重要的原因在于它的约定配置。现在软件开发越来越复杂,大家都试图将软件设计的越来越灵活,很多内容我们都希望是可配置的,但是过多的配置也会带来很大的工作量,解决这个问题的方法就是约定。对于一些简单的,不太可能经常变化的内容我们以一种约定的方式进行设计。使用过其他ORM框架的朋友可能知道一般ORM都有对应的映射配置文件(一般是一个Xml文件),但是EF并没有。在EF中是以一种约定的方式进行表、列同实体类进行映射的,与此同时为了提高最大的灵活性EF中可以通过Fluent API和Data Annotations两种方式对映射进行灵活配置。 Entity Framework 默认约定 1.将数据类的类名复数形式作为数据表名称,并且使用“dbo”作为默认架构。   例如定义一个Person数据类,那么将会自动生成“dbo.Persons”表。 2.将数据类中的“ID”属性或者“<类名>+ID”作为主键(不区分大小写),并且如果该列为数值类型或者GUID列将作为标识列。   例如在Order类中如果有ID或者OrderID属性将默认作为主键,二者均出现优先使用 “ID”属性。 3.使用导航属性约束两个表之间的关系,在从表数据类中除了导航属性

EF + SqlServer 表没有常规主键,无法更新 EntitySet

坚强是说给别人听的谎言 提交于 2020-03-14 15:20:56
错误描述: 1. U811.1 SqlServer数据库CurrentStock表,没有常规主键,对接系统时使用EF Code First提示: 生成过程中发现错误: 警告 6002: 表/视图“***.dbo.CurrentStock”未定义主键。已推断出该键,并将定义创建为只读的表/视图。 2. 调用EF处理材料出库时,提示: 无法更新 EntitySet“CurrentStock”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <UpdateFunction> 元素。 解决方法: 在edmx文件中找到CurrentStock的EntitySet节点,将节点内的DefiningQuery内容删除 来源: https://www.cnblogs.com/lnvc/p/12491959.html

EF框架学习

℡╲_俬逩灬. 提交于 2020-03-02 11:41:32
1. EF基于一种思想——O/R Mapping,我们先了解ORM的相关概念: 广义上,ORM指的是面向对象的 对象模型 和关系型数据库的 数据结构 之间的相互转换。 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要要了解任何关系型数据库存储数据的实现细节。 2. EF概念:实体框架(Entity Framework)是ADO.NET中的一组支持面向数据的软件应用程序的技术,是微软的一个ORM框架。ORM的核心思想就是把实体的变化映射成表的变化,这样我们在开发的时候不再关心数据库中的表的东西,而是直接面向实体开发。 从下面这张图中我们可以从宏观上看出EF的核心流程这样的,我们的增、删、改、查操作不再是之间面向数据库中的表来操作,而是面向中间的一个上下文(objectContext)来实现,直接操作实体,这些操作经过OR映射完成对相应数据库的操作。 Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象(entity),而数据字段都转换为属性(property),关系则转换为结合属性(association),让数据库的E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。 而在抽象化的结构之下

自己来控制EntityFramework4.1 Code-First,逐步消除EF之怪异现象

泪湿孤枕 提交于 2020-03-02 10:35:03
最近的项目开始使用EF4.1,拜读各路大侠文章数遍,满以为可以轻车熟路,却屡遭悲惨啊,怪异现象接连... 1, 虽然使用Code-First模式,就是因为它代码整洁清爽条理,但还是习惯先建立数据表,再POCO... 结果发现Entity实体类与数据表的映射是EF自己独特智能操控的,比如实体类名为Product,它会智能映射成Products的表,加了个"s",然而,Category的实体类却映射成了Categories, 它居然能识别单词的复数写法,很神奇,难道它内置词典?要不然它该映射成Categorys才合理嘛(虽然它不是个单词),你说EF神奇么,真神奇! 后来,同事给个方法,解决了这个神奇的功能,我要自控,有些关键地方不需要EF来控制我的想法,于是在分类名上面添加一个特性[Table("映射的表名")]即可。 [Table("Product")] public class Product { public int ID { get; set; } [Required] [Display(Name = "产品名")] public string Name { get; set; } public int CategoryID { get; set; } [Required] [Display(Name = "产品价格")] public Decimal? Price { get