首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Entity Framework 4 的 POCO学习

您的实体对象可以独立于EF存在,由此EF更好地支持了测试驱动开发(test-driven development)领域驱动设计(domain-driven design)。...同时,EF仍旧可以帮助跟踪POCO实体的变化,允许延迟加载,也会自动修正对导航属性(navigation properties)的改动。...其中一个很大的原因,也许就是不支持POCO,至少我自己是这么想使用EF1的,Entity Framework 4.0版本(又称EF V2)将提供POCO支持,对很多人来说,这是开始使用Entity...学习最好的方式当然是动手练习了,今天花了大半天跟着这篇文章【翻译】Entity Framework 4.0使用 Repository Unit of Work 模式,这篇文章里头有3篇POCO的系列...一个简单的规则是,在你的POCO类中使用的实体类型名称,属性名称,复杂类型名称必须匹配那些概念性模型定义了的相应名称。

1.1K80

Entity Framework 系统约定配置

EF是以一种约定的方式进行表、列同实体类进行映射的,与此同时为了提高最大的灵活性EF可以通过Fluent APIData Annotations两种方式对映射进行灵活配置。...3.使用导航属性约束两个表之间的关系,在从表数据类除了导航属性,推荐定义一个属性在从表数据类(如果不指定将默认生成一个“+”的列;此外在主表推荐定义一个集合从表属性用户导航...,当然这个属性不定义也可以正常生成关系但是不利于使用),具体规则:“+”或者“+”又或者“”,其属性名不区分大小写并且如果出现多种匹配按照先后顺序匹配...;如果不存在外属性关系注册为可选的,否则注册为必选项并且此时将设置级联删除关系;如果在从表类中有多个导航属性对应同一个数据类那么需要使用fluent API或者Data Annotations进行手动配置...例如有一个Order类,主键为OrderID,OrderDetail类中有一个导航属性Order(Order类型),那么当你定义一个OrderIDOrderDetail,那么OrderOrderDetail

82520
您找到你想要的搜索结果了吗?
是的
没有找到

张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

Code First 是被应用于领域驱动设计(Domain Driven Design)的,由于作者并没有 DDD 的实践,因此无法评判 Code First 的实用性。...导航(Navigation)属性是数据库表之间的关系实体类的体现。...设置导航属性之前,首先需要理清楚医院医生存在着怎样的数量关系,医生是医院的附属,一家医院下面会有多名医生,因此医院医生之间是一对多的关系。为了方便理解,下面只保留主键、导航属性。...提示 导航属性的 virtual 关键字不是必须的,当使用懒加载(lazy loading)时才有意义。在任何时候都不建议使用懒加载,这会拖慢数据的查询速度。... .NET 字符串并不是加密的,密码可能会短暂的出现在内存,或是对程序的反编译都可能会造成密码的泄露。

2.4K10

EF 约定介绍

当前环境为EF Code First开发模式 一、EF默认约定 1、常用约定 (1)、当没有显示指定实体主键的时候,EF会默认将长得最像Id的属性(且类型为GUID)设为主键 (2)、设计实体时,当一个实体包含一个集合属性...如果主键属性的类型为数字型或 GUID 则会被当成标识列(Identity Column) 4、关系(/导航属性)约定Relationship(Foreign Key/Navigation Properties...) Convention EF,两个实体间的关系是通过导航属性的方式来实现,每一个对象都能拥有一个它所参与的关系的导航属性,导航属性提供了一种方式两端来操作这个关系来获取我们需要的数据,可以返回任何一方的引用对象...除了导航属性规定实体间的关系,属性来式规定实体间方式的一种手段.Code First能够推断以下的命名属性(优先级从上到下): (1)、导航属性名+关联实体的主键名 (2)、关联实体实体名+...关联实体的主键名 (3)、关联实体的主键名 注: (1)、当关系被检测到,Code First会根据的可空性来推断关系的具体形式;如果属性是可空的,那么关系会被设置为可选的,否则,关系就是必选的

1.6K100

EF Core的增删改查

初始化 实际开发,一般都是先设计好数据表再进行开发,所以很少用到EF Core的数据迁移功能。所以EF Core的初始化,一般也指的是EF Core上下文初始化。...不过如果有导航属性的话,新增的时候,EF Core会自动检索导航属性的另一端是否需要新增到数据库,如果需要新增的话,EF Core会自动标记为新增的。...删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端的是可空类型的,并不会删除导航属性另一端的元素只会设置键指向为NULL,如果另一端是不可空的,那么就会同时删除。...如果需要修改,可以使用以下方法修改,配置导航属性的时候: OnDelete(DeleteBehavior.Cascade); 对于可为NULL的来说,枚举DeleteBehavior的值起以下作用...: 行为名称 对内存的依赖项/子项的影响 对数据库的依赖项/子项的影响 Cascade 删除实体 删除实体 ClientSetNull(默认) 属性设置为 null None SetNull 属性设置为

3.1K20

《Entity Framework 6 Recipes》翻译系列 (1) —–第一章 开始使用实体框架之历史框架简述「建议收藏」

EF是微软极力推荐的新一代数据库访问技术,它已经成熟,做为一名.NET开发人员,如果你还没有使用它的话,那感紧开始吧,特别是DDD(领域驱动设计)的爱好者,更应该学习它,因为它是领域模型的绝佳搭档!...在编码方面,我们现在使用面向对象领域模型,架构、设计编码都对应于现实世界的事情,比如客户订单。...如前所述,一个实体类型代表领域模型的一个类。一个实体类型的实例通常是指一个实体。如果你使用实体框架设计器,一个实体类型设计器中被表示成一个拥有不同属性的方框。...导航属性(Navigation properties)是指跟其它实体有关联的属性(数据库关系)。实体类型不是导航属性属性通常叫做标量属性(scalar proerties).   ...每个实体类型都有一个属性或一个属性集来指示它的实体实体框架中一个实体唯一标识一个实体,一般它被映射到实体对应的底层数据库表的主键。

1.3K20

EF Core 导航属性配置

意思就是无法定义一对一关系的子/从属方 如何解决呢?之前在说的时候,EF会根据导航属性自动生成一个,但是这一条一对一这里就有点不太起作用了。...所以我们必须手动导航属性的一侧实体类里配置,并用 HasForeignKey指定。(如果不使用Fluent API,也是需要在一端实体类配置,另一端则不需要)。...只SingleModel表中生成了一个关系,检索SingleTargetModel的时候,EF会从SingleModel表检索对应的关系,并引入进来。...如果取消这行注释,EF会在SingleTargetModel表添加一个名为SingleId并指向SingleModel的取消SingleModel里的。...EF 6 中间表可以仅存在于关系,但是EF Core3 还没有这个的支持。也就是当前文章使用的版本。 5. 附加 EF约束导航属性是默认可空的。

3K20

Entity Framework 约定

约定,类似于接口,是一个规范规则,使用Code First 定义约定来配置模型规则。在这里约定只是记本规则,我们可以通过Data Annotaion或者Fluent API来进一步配置模型。...EF定义关系要使用导航属性,通过导航属性可以定义多个模型之间的关系。大部分情况下我们会将导航属性属性结合在一起使用。...当EF检测出外属性后,会根据属性是否为空来判断关系,如果可以为空,那么模型之间的关系将会配置成可选的,Code First 不会再关系上配置级联删除。...简单的说就是:一个复杂类型作为已存在对象的属性EF会将复杂类型的类映射到已存在的表,已存在的表包将包含这些列,不是将复杂类型映射成另外单独的一张表。...varchar 类型,不是 nvarchar 类型。

1.3K10

C# 数据操作系列 - 6 EF Core 配置映射关系

对于其他属性EF会自动按照同名的形式映射到数据表。 对于,如果在类里添加了引用类型,而这个引用类型也EF的上下文中,EF会把这种属性称为导航属性。...EF一旦类里检索到了导航属性,就会去寻找对应的EF会认为 属性名+Id或者类名+Id 可能是属性,如果找到名称一致且类型与导航属性目标类的主键类型一致,则认为是。...如果类型不一致,EF则认为该类设置有误。如果没找到符合名称要求的属性EF会自己添加一个属性。 对于一对一,EF要求导航属性双方都应该具有配置。 一对多,EF要求多的一方设置。...同时如果在一方这边设置了集合类型的导航属性,那么EF会自动到目标类里寻找属性。 说完了一对一一对多,那么多对多呢? 如果没有声明的话, EF会生成一个中间表。 2....总结 在这一篇领着大家看了一下EF Core对于映射关系这一部分的内容,我留下了相关的FluentAPI介绍,我打算在下一篇介绍。因为这部分的内容比较麻烦,而且使用率也相当高。

2.7K21

EF基础知识小记一

2、集成查询语言LINQ LINQEF都出自于微软,都能帮助我们解决失配的问题.使用EF等实体框架,我们能在设计(Model First)或者代码(Code First)对领域实体进行建模.还能建立实体类之间的关系...,不是关系型数据库的结构对象.实体数据模型允许你自定义实体类关系型数据库表之间的映射.不仅仅是一对一或者类到表的映射. ?  ...这里的关键点在,开发人员项目相关人员使用表示应用程序上下文中的领域实体类,DBA构建底层的数据库表以求创建高效和数据库。实体框架能很容易地架起两者单的桥梁。...6、实体属性 一个实体类型拥有一个或者多个属性,像一个类,属性分为标量属性导航属性 标量属性:像integer,string等简单类型就是标量属性,也可以是复杂类型 导航属性:是指跟其它实体有关联的属性...(数据库关系) 7、上下文对象 下文对象为ObjectContext对象,现在,实体框架支持另一个最新的名为DbContext的上下文对象。

1.6K90

如何运用领域驱动设计 - 存储库

不要为了显示而使用存储库 工作单元 持久化的困难 总结 概述 在上一篇文章,我们已经了解过领域驱动设计中一个很核心的对象-聚合。...下一次的文章会对工作单元的实现进行解析优化,可能它就不属于 《如何运用领域驱动设计》 系列的正传系列了(算个番吧 ( ̄▽ ̄)")。...答案是否定的,至少实践领域驱动设计的应用。...原著《领域驱动设计:软件核心复杂性应对之道》 对存储库的有关解释: 为每种需要全局访问的对象类型创建一个对象,这个对象就相当于该类型的所有对象在内存的一个集合的“替身”。...这里我摘抄了 领域驱动设计模式、原理与实践 的一段话,我觉得它的描述非常好: 存储库不是一个对象。

95930

Entity Framework 关系约束配置

前言 简单的说一下自己的理解,大家应该都很明白ADO.NET,也就是原生态的数据库操作,直接通过拼接SQL语句,表与表之间通过链接(inner join  left join  或者子查询),也就是设计表的时候预先设计好的...Entity Framework 关系约束配置  对于实体关系对应的数据表关系,无非“0:1,1:1,1:N,N:N”这几种,可以使用导航属性的数据类型来表示,0…1端使用单实体类型表示,N端使用ICollection...要配置的实体类型将成为依赖对象,且包含主体的。作为关系目标的实体类型将成为关系的主体。...;注意如果不使用FluentAPI配置,ProductOrder配置了相应的导航属性EF也会默认生成一张表(表名为“+”) Map:将关系配置为使用未在对象模型公开的属性...可通过指定配置操作来自定义列表。如果指定了空的配置操作,则约定将生成列名。如果在对象模型公开了属性,则使用 HasForeignKey 方法。并非所有关系都支持在对象模型公开外属性

61210

基于ABP落地领域驱动设计-02.聚合聚合根的最佳实践原则

领域对象是DDD的核心,我们会依次分析聚合/聚合根、仓储、规约、领域服务的最佳实践规则。内容较多,会拆分成多个章节单独展开。...当您使用关系数据库ORM时,没有必要这样做。然而,它是领域驱动设计的一个重要实践。 聚合聚合根最佳实践 以下最佳实践确保实现上述原则。...用于 EF Core 关系型数据库 MongoDB ,自然不适合有这样的导航属性/集合。...然而,如果你认为忽略这条规则是切实可行的,请参阅前面基于ABP落地领域驱动设计-01.全景图中关于数据库独立性原则的讨论部分。 保持聚合根足够小 一个好的做法是保持一个简单小的聚合。...聚合根/实体的主键 一个聚合根通常有一个ID属性作为其标识符(主键,Primark Key: PK)。推荐使用 Guid 作为聚合根实体的PK。 聚合的实体(不是聚合根)可以使用复合主键。

2.9K30

EF基础知识小记五(一对多、多对多处理)

本文主要讲EF一对多关系多对多关系的建立 一、模型设计器 1、一对多关系 右键设计器新增关联 导航属性属性可修改 2、多对多关系 右键设计器新增关联 模型设计完毕之后,根据右键设计器根据模型生成数据库...,根据数据库生成模型就能生成对应的模型 三、多对多无载荷 根据上面的建表语言,我们能得出Teacher表Student表在数据库的关系如下图: 数据库关系图: 模型设计的关系如下图: 模型设计图...: 观察二图的区别,发现数据库表关系图中的StudentTeacher(链接表)没有出现在模型设计。...原因如下: 因为链接表没有标量属性(没有载荷),实体框架认为它存在的唯一价值就是联结TeacherStudent,没有标量属性的联结表,各自的实体中将以ICollection集合的形式出现....,所以换成订单产品,所以链接表将会产生一个订单数量的载荷(也就是链接表多了一个标量属性), 模型设计图如下: 有载荷的多对多关系比无载荷的多对多关系更加的简介明了。

2.4K80

Entity Framework 基础知识走马观花

例如:NavigationProperty 导航属性,因为T_Person表与T_Class、T_Message表都存在一对一或一对多的关系(即存在外),因此EF模型所生成的对象实体,加入了所在实体的导航属性...实际应用,例如对于WebService的远程调用时,如果我们使用添加Web引用的方式,那么WebService会为我们自动生成代理类,我们所有的交互都只是代理类进行的,没有直接和服务提供者进行。...因为,这里的OrderBy()方法是对内存的数据进行的排序,不是前面的Where()方法一起拼接成SQL语句。 ?...3.3 使用Include提高查询效率   前面我们看到了延迟加载EF中被广泛应用,但是延迟加载对于的加载也存在不足:那就是每次调用实体都会去查数据库。   ...Include方法时,便会与T_Person表进行一个连接查询,将连接查询到的T_Person部分数据存入T_Class的T_Person属性,也就是都存入了内存,后面再次访问实体只需要从内存读取不用再发出多个数据库查询请求了

1.3K20

C# 数据操作系列 - 14 深入探索SqlSugar

花式映射 实际开发,程序的实体类和数据库的表名并不能完全一致,造成的原因有很多,例如说团队对数据库的命名对程序的命名有着不同的要求,数据库是先建立的程序是后开发的,又或者是程序只使用了数据库中一部分表等等...1.2 动态配置 与EF等一样,SqlSugar也支持动态配置,那么就跟着我一起去看看,如何实现动态配置吧: SqlSugar支持的动态配置功能较少,最好是预先设计好了数据库,然后使用动态配置做好关联。...关联 SqlSugar并没有设置导航属性的正式加载,而是添加了一个Mapper方法:查询的时候,调用Mapper映射关系,以达到导航属性一起加载的功能。...首先需要注意的是,SqlSugar中导航属性需要配置为忽略,避免被直接解析为SQL,否则会提示Sequence contains no elements。...所谓主对象就是必须持有一个键指向另一个表。 一对多要求从拥有集合属性的那段(也就是其中的“一”)开始,关联指示为 集合.First().

1.8K30

EntityFramework Core 学习扫盲

包含排除实体类型 将实体Context映射到数据库有多种方式: 使用DbSet定义属性OnModelCreating方法中使用Fluent Api配置。...备用 Alternate Keys是EF CORE引入的新功能,EF 6.X版本并没有此功能。备用可以用作实体除主键索引的唯一标识符,还可以用作目标。...Fluent Api,有两种方法可以指定备用,一种是当开发者将实体属性作为另一个实体的目标,另一种是手动指定。EF CORE的默认约束是前者。...备用 备用之前的小节已经提过,使用以下代码配置的列将自动设置为唯一标识列。...虽然主体也包括主键,但是主键EF CORE时强制定义的,所以HasPrincipalKey只会将属性配置为备用。 2.

9.5K90

关于EF Code First模式不同建模方式对建表产生的影响

今天在学EF Code First模式的时候,发现几个很有趣的问题,问题如下: 1、当编写玩实体后,不指定任何主键约束,EF会找长的最像Id的,然后设置其为主键,验证代码如下: //User类...结论:发现EF我没有指定那个是主键的情况下,将UserId设为了主键 2、当一个实体中有两个带Id的字段,EF会将最像Id的设为主键,优先级  Id>UserId>UserId_Id class User...EF将Id设为了主键,UserIdUserId_Id的优先级自行验证. 3、关于的问题,当在实体中加入导航属性,EF生成可能会当前实体的其他字段的影响.验证代码如下: class PhotoInfo...EF生成了一个User_Id的属性,关联User表 下面修改PhotoInfo实体,代码如下: class PhotoInfo { public Guid Id {...EF不再自动生成字段,而是将UserId属性设为了. 以上都是我测试出来的关于EF默认的行为,比较片面,欢迎指正.

95160
领券