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

在EF core2.0中,如何在不丢失外键的情况下实现依赖实体只读?

在EF Core 2.0中,可以通过以下步骤实现在不丢失外键的情况下实现依赖实体只读:

  1. 首先,确保在数据库模型中定义了外键关系。可以使用[ForeignKey]特性或Fluent API来定义外键关系。
  2. 在定义实体类时,将导航属性(即外键所指向的实体)设置为只读。可以使用private修饰符将导航属性设置为私有,并且只提供只读的公共属性来访问导航属性。
代码语言:csharp
复制

public class Order

{

代码语言:txt
复制
   public int Id { get; set; }
代码语言:txt
复制
   public string OrderNumber { get; set; }
代码语言:txt
复制
   private Customer _customer;
代码语言:txt
复制
   public Customer Customer => _customer;

}

代码语言:txt
复制
  1. 在DbContext中,使用modelBuilder.Ignore()方法来忽略导航属性,以防止EF Core尝试更新导航属性。
代码语言:csharp
复制

protected override void OnModelCreating(ModelBuilder modelBuilder)

{

代码语言:txt
复制
   modelBuilder.Entity<Order>()
代码语言:txt
复制
       .Ignore(o => o.Customer);

}

代码语言:txt
复制

这样,EF Core将不会尝试更新导航属性,从而实现了依赖实体的只读性。

需要注意的是,以上方法适用于EF Core 2.0版本。在较新的版本中,可能会有一些变化。此外,具体的实现方式可能因项目的架构和需求而有所不同。

关于EF Core的更多信息和使用方法,可以参考腾讯云的相关产品文档和教程:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Entity Framework Core 2.0 新特性

ef core 2.0 ,我们将自定义DbContext类型注册到DbContextPool服务,可让该数据库上下文类型实例重复使用。...以前ef版本,调用查询api时,可以通过自动编译并缓存编译结果达到一次计算多次调用,有效提高了ef性能,显示编译查询(Explicitly compiled queries)这种机制可以绕过缓存查找性能消耗...要使用表拆分,必须在共享表所有实体类型之间配置标识关系(属性构成主键) 示例代码: 1 modelBuilder.Entity() 2 .HasOne(e => e.Details...目前只支持标量函数 EF Core迁移将不负责创建它,您必须在数据库创建映射函数 九.code first 实体配置   EF6可以通过 EntityTypeConfiguraiton 封装特定实体类型配置代码...,EF Core2.0,这个特性回来了(EF Core 之前 core版本不支持)。

1.9K50

01-EF Core笔记之创建模型

=> new { c.State, c.LicensePlate }); //组合备用 必填和选填 映射到数据库必填和可空,约定情况下,CLR可为null属性将被映射为数据库可空字段...在数据库,数据表之间关系可以分为一对一、一对多、多对多三种,实体之间同样有这三种关系,但是EF Core仅支持一对一、一对多关系,如果要实现多对多关系,则需要通过关系实体进行关联。...,显然无论Blog或Tag定义都不合适,此时就需要一张关系表来进行关联,这张表就是BlogTag表。...Core不会对它进行跟踪,也不允许新增、修改和删除操作,但是映射到视图、查询对象、Sql语句查询、只读表等情况下用到。...实体构造函数 EF Core支持实体具有有参构造函数,默认情况下EF Core使用无参构造函数来实例化实体对象,如果发现实体类型具有有参构造函数,则优先使用有参构造函数。

3.1K20

EntityFramework Core 学习扫盲

少数几个CLR类型不做处理情况下,映射到数据库时将存在可空选项,string,int?,这种情况也在下列方式做了说明。...备用 Alternate Keys是EF CORE引入新功能,EF 6.X版本并没有此功能。备用可以用作实体除主键和索引唯一标识符,还可以用作目标。...Fluent Api,有两种方法可以指定备用,一种是当开发者将实体属性作为另一个实体目标,另一种是手动指定。EF CORE默认约束是前者。...所以在一般情况下,所有的实体都是主体。而主体(Principal Key)指的是主体主键/备用。大家都知道,主键/备用都是不可为空且唯一,这就引出了唯一标识列写法。...常见关系有1-1,1-n,n-n,除此以外,关系两边还有可空不可空控制。那么EF CORE,我们怎么实现这些关系呢?

9.5K90

EF Core增删改查

而删除,如果在配置导航属性时,没有设置级联删除,删除当前元素,如果另一端是可空类型,并不会删除导航属性另一端元素只会设置键指向为NULL,如果另一端是不可空,那么就会同时删除。...: 行为名称 对内存依赖项/子项影响 对数据库依赖项/子项影响 Cascade 删除实体 删除实体 ClientSetNull(默认) 属性设置为 null None SetNull 属性设置为...null 属性设置为 null Restrict None None 而对于不可为NULL来说,枚举DeleteBehavior值起以下作用: 行为名称 对内存依赖项/子项影响 对数据库依赖项...Restrict None None 而对于数据修改,EF Core做法是通过监控实体ChangeTracker来实现对数据实体状态更新。...从数据库角度来看,EF CoreSaveChanges过程是以事务形式推送给数据库。如果出错,那么事务就会回滚。 所以一般情况下EF不需要开启事务。

3.1K20

ASP.NET MVC5高级编程——(3)MVC模式模型

首先数据库主外定义: 主键 定义: 唯一标识一条记录,不能有重复,不允许为空 表是另一表主键, 可以有重复, 可以是空值 作用: 用来保证数据完整性 用来和其他表建立联系用...个数: 主键只能有一个 一个表可以有多个 因为这个主外属性对于理解后面的EF框架(ORM)很有帮助,所以这里我们多讲一些!...而称ArtistID属性为属性(foreign key),因为与模型对应数据库,专辑表(Album)和艺术家(Artist)表存在对应关系,即ArtistID是Album表!...代码优先是指可以创建数据库模式、也不打开Visula Studio设计器情况下,向SQL Server存储或检索信息。...ASP.NET MVC可以通过使用Bind属性限制可被更新Model属性。绑定多个字段部分字段:通过Bind属性来定义Model需要绑定哪些字段。

4.7K40

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

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

96060

EntityFramework 键值映射

如果在 EF OnModelCreating 配置了实体映射,也就是 SQL Server ForeignKey,那么我们添加实体时候,主实体主键值会自动映射到子实体键值,并且这个操作一个...SaveChanges ,但如果没有 OnModelCreating 中进行映射配置,我们添加实体时候,就不会自动映射键值了,什么意思呢?...可以看到,Student 表 ClassId 值是 0,而并不是我们预想 1,这是一个问题,增加情况下,我们一般会这样解决: static void Main(string[] args...就是实体更改了,需要进行 EF 迁移,如果你进行 EF 迁移的话,会发现,虽然我们没有 OnModelCreating 中进行 ClassId 映射配置,但 EF 也会自动映射 ForeignKey...实际上表类型可能是很多种可能是常见字符类型,也可能是int类型,也可能是long类型等等。

4.1K50

EF 约定介绍

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

1.6K100

《面试季》经典面试题-数据库篇(一)

面试题目 一: Mysql存储引擎分类 InnoDB: 支持事务,行锁及无锁读提高了并发效率,为了数据完整性,支持 MyISAM: 不支持事务和,表级别锁,优势在于访问速度快,一般用于只读或者以读为主数据场景...InnoDB和MyISAM区别 (一) InnoDB特点:   1、支持事务处理、ACID事务特性;   2、实现了SQL标准四种隔离级别;   3、支持行级锁和约束;   4、可以利用事务日志进行数据恢复...2、此引擎不支持事务,也不支持。   ...(并发情况下,另外事务对数据进行了删除或者增加操作) (二): 解决方案:      1、更新丢失更新问题可以通过应用层来解决,加锁。      ...3、第三范式: 第二范式基础上,非主键列只依赖于主键,不依赖于其他非主键(不存在传递依赖) 举例:    :Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)这样一个表结构

83410

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

前言 《C# 数据操作系列 - 5. EF Core 入门》篇,我们简单通过两个类演示了一下EF增删改查等功能。细心小伙伴可能看了生成DDL SQL 语句,在里面发现了些端倪。...对于主键,默认情况下EF会检索实体类有没有名为Id或者类名+Id属性,如果有EF则认为这个属性是主键,否则会认为该类没有设置主键。EF检索到主键类型是数字类型的话,会自动添加自增长约束。...对于其他属性,EF会自动按照同名形式映射到数据表。 对于,如果在类里添加了引用类型,而这个引用类型也EF上下文中,EF会把这种属性称为导航属性。...EF一旦类里检索到了导航属性,就会去寻找对应EF会认为 属性名+Id或者类名+Id 可能是属性,如果找到名称一致且类型与导航属性目标类主键类型一致,则认为是。...如果类型不一致,EF则认为该类设置有误。如果没找到符合名称要求属性,EF会自己添加一个属性。 对于一对一,EF要求导航属性双方都应该具有配置。 一对多,EF要求多一方设置

2.7K21

02-EF Core笔记之保存数据

Core,除了独立模型,还有与模型关联数据,这部分数据通过独立模型添加到模型SaveChanges时将会持久化到数据库。...Blog引用设置为null即可,此时EF Core将判断是否为必须关系,如果为必须关系,则从数据库删除Post对象,如果为非必须关系,则将数据库对应设置为null。...级联删除 级联删除是数据库概念,意思是当主体被删除时,所有依赖该主体项(通过关联)也会被自动删除。...EF Core对于提供了更细粒度管理,它允许我们定义删除行为,来控制依赖关系被移除时,如何处理关系实体。...这里需要探讨是,当对依赖关系列表进行部分删除,如何进行更新问题。

1.8K40

水利数据库设计与实现-数据库设计基础知识

关系模型   关系模型也即数据库中常用表,包括实体属性,标识出实体主键和.   ...,也可以端中加入1端实体主键:   M:N联系,联系必须作为一个单独关系模式,其主键是M和N端联合主键。   ...候选:超中去掉冗余属性,剩余属性就是候选。   主键:任选一个候选,即可作为主键。   :其他表主键。   主属性:候选属性为主属性,其他属性为非主属性。   ...实体完整性约束:即主键约束,主键值不能为空,也不能重复。   参照完整性约束:即约束,必须是其他表已经存在主键值,或者为空。   ...此时 事务2写回数据会覆盖事务1写回数据水利数据库设计与实现,就丢失了事务1对A更新。

62120

EF Core 导航属性配置

所以我们必须手动导航属性一侧实体类里配置,并用 HasForeignKey指定。(如果不使用Fluent API,也是需要在一端实体类配置,另一端则不需要)。...,现在EFSingleModel表中生成了一个关系,检索SingleTargetModel时候,EF会从SingleModel表检索对应关系,并引入进来。...其他数据库提示,不能为空。 所以也就是说EF推荐这种双方互导航一对一关系。...多对多 讲多对多时候,需要先明白一个概念。多对多,对于导航两端来说,是无法自己身上找到对应标记。也就是说,各自数据表不会出现指向对方。那么,如何实现多对多呢?...EF 6 中间表可以仅存在于关系,但是EF Core3 还没有这个支持。也就是当前文章使用版本。 5. 附加 EF约束,导航属性是默认可空

3.1K20

服务器 数据库设计技巧--1

主键与 一般而言,一个实体不能既无主键又无E—R 图中, 处于叶子部位实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有(因为它有父亲)。...主键与设计,全局数据库设计,占有重要地位。...因为:主键是实体高度抽象,主键与配对,表示实体之间连接。 ·3. 基本表性质 基本表与中间表、临时表不同,因为它具有如下四个特性: (1) 原子性。基本表字段是不可再分解。...4、设计 作为数据库对象,很多人认为麻烦而不用,实际上,大部分情况下是很有用,理由是:   是最高效一致性维护方法,数据库一致性要求,依次可以用、CHECK约束、规则约束、...我这里说谨慎,是因为级联删除和级联更新有些突破了传统关于定义,功能有点太过强大,使用前必须确定自己已经把握好其功能范围,否则,级联删除和级联更新可能让你数据莫名其妙被修改或者丢失

1.9K40

数据库分片(Database Sharding)详解

但是某些情况下,将某些表复制到每个分片中作为参考表是有意义。例如,假设某个应用程序数据库依赖于重量测量固定转换率。...在这种情况下,数据库分片任何好处都被慢速和崩溃抵消了。数据库可能需要修复和重新分片,才能实现更均匀数据分布。 另一个主要缺点是,一旦对数据库进行了分片,就很难将其恢复到未分片架构。...本节,我们将介绍一些常见分片架构,每个架构使用稍微不同流程来跨分片分发数据。...Key Based Sharding 基于分片 添加描述 为了确保数据记录以正确方式被放置正确分片中,哈希函数输入值都应该来自同一列。此列称为分片。...大多数情况下,将一个数据库服务器扩展到具有更多资源计算机比分片需要更少工作量。与创建只读副本一样,具有更多资源服务器升级可能会花费更多钱。

10.9K72

项目实践,Redis集群技术学习(十六)

Redis.7.5 集群读写分离 1.只读连接 集群模式下从节点不接受任何读写请求,发送过来命令会重定向到负责槽主节点上(其中包括它主节点)。...当需要使用从节点分担主节点读压力时,可以使用readonly 命令打开客户端连接只读状态。之前复制配置 slave-read-only 集群模式 下无效。...在从节点上执行 cluster failover 命令发起转移流程,默认情况下转移期间客户端请求会有短暂阻塞,但不会丢失数据,流程如下: 1)从节点通知主节点停止处理所有客户端请求。...2)主节点发送对应从节点延迟复制数据。 3)从节点接收处理复制延迟数据,直到主从复制偏移量一致为止,保证复制数据丢失。 4)从节点立刻发起投票选举(这里不需要延迟触发选举)。...手动故障转移时,满足当前需求情况下建议优先级:cluster failver>cluster failover force>cluster failover takeover。

50220

Entity Framework 系统约定配置

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

82720

MySQL 性能优化,优化设计及设计原则解读

; (3)文件系统用操作系统存取方法对数据进行管理,数据库系统用DBMS统一管理和控制数据; (4)文件系统实现以文件为单位数据共享,数据库系统实现以记录和字段为单位数据共享。...3NF:属性不依赖于其它非主属性 , 消除传递依赖这样设计就不合理,学号做主键,学生课程表(学号=课程),当学号修改,对应课程表也需要修改,这就是属于传递依赖 BCNF:符合3NF,每个表只有一个候选...首先就有这样规则:不要用业务规则来做主键,主键就应该和业务无关。 经常用order_no(业务订单号),即使是唯一,也建议做主键,容易产生传递依赖问题,这样就不符合第三范式了。...,记录是没有删除,这样对于数据库数据是很容易混乱,不便于维护,那我要是使用是强方式,这样直接删除主键记录,没有删除外记录,这样是要报错,这样容易找到代码上问题,设计能对于数据完整性有一个好约束...没有定义定义不好表。 2NF 多个属性有同样前缀。 重复数据组。 汇总数据,所引用数据一个完全不同实体

81631

关于游戏服务器服务拆分

游戏服务器,我们做服务拆分,大部分情况下都是为了可伸缩,而不是为了高可用(这里暂不考虑那些使用WEB模式实现游戏服务器思路。...关系型数据库,Mysql,有一项功能叫“约束”,用于保证数据完整性。然而随着各种Mysql分布式方案出现,这项功能被越来越少使用。...其原因就是因为分布式系统,“约束”很难实现,需要应用逻辑自己来保证。 我们游戏服务设计,也存在同样问题。 假如有一个“联盟服务”,有一个“城池服务”。...这时,一般会有两种实现方案: 1) “城池服务”城池丢失时,直接推送给“联盟服务”进行处理, 并不在意“联盟服务”是否收到消息。...2) “城池服务”城池丢失时,通过RPC请求等待“联盟服务”处理完“国家变联盟”逻辑之后, 再修改城池归属。 即使不考虑网络问题情况下,这两种方案也会存在数据不一致情况。

81410
领券