一对多关系中从表的数据如何删除和更新。

sftl25789 2017-09-11 02:01:17
一对多关系中从表的数据如何删除和更新。

主表如下:

public class A
{
public int ID{get;set;}

// 从表导航属性
public virtual List<B> bs{get;set;}
}

从表:
public class B
{
public int ID{get;set;}

// A表外键
public int Aid{get;set;}
// A表导航属性
public virtual A a{get;set;}
}


Map已经设置好了对照关系。

但是插入A表和B表的数据时是没有问题的,都能正确插入。但是,我想把B表的数据进行更新,有的数据会被删除,有的不变,还会增加新的数据进去。

应该怎么办呢?

我把EF封装到了数据层,不能在其他层使用ef的代码。我每次更新从表数据时都是重新new一次,也就是a.Bs = new List<B>();但是这样更新的话,新的数据会被EF当作新记录插入到从表,原有的记录还在,怎样删除原有的记录呢?
...全文
1567 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sftl25789 2017-09-12
  • 打赏
  • 举报
回复
请问各位有没有什么更好的办法?
sftl25789 2017-09-12
  • 打赏
  • 举报
回复
谢谢,帮忙,问题解决了,我在从表实体里加了一个属性用来标识是否被删除,在Data层,提交时遍历所有这个属性为true的实体,然后在上下文中删除。 虽然实现了,但是感觉这样不是很理想。
正怒月神 2017-09-11
  • 打赏
  • 举报
回复
哦,看错了,你是要更新主从表信息? 为何 A不是通过ef查询出来的?
正怒月神 2017-09-11
  • 打赏
  • 举报
回复
public override A Update(A entity) { foreach (var b in entity.bs) { base.context.B.Attach(b); } base.context.OperationRegister.Attach(entity); base.context.Entry(entity).State = System.Data.Entity.EntityState.Modified; return base.context.SaveChanges() > 0 ? entity : null; }
exception92 2017-09-11
  • 打赏
  • 举报
回复
一对多关系中从表的数据如何删除和更新 -》foreach呀。
sftl25789 2017-09-11
  • 打赏
  • 举报
回复
补充数据层实现方式 public override A Update(A entity) { foreach (var b in entity.bs) { base.context.B.Attach(b); } base.context.OperationRegister.Attach(entity); base.context.Entry(entity).State = System.Data.Entity.EntityState.Modified; return base.context.SaveChanges() > 0 ? entity : null; }
课题一高性能高扩展的千亿级实时数据仓库全实现 随着我们从IT时代步入DT时代,数据积累量也与日俱增,同时伴随着互联网的发展,越来越多的应用场景产生,传统的数据处理、存储方式已经不能满足日益增长的需求。而互联网行业相比传统行业对新生事物的接受度更高、应用场景更复杂, 因此基于大数据构建的数据仓库最先在互联网行业得到了尝试。 高性能高扩展的亿级电商全端实时数据仓库全实现(PC、移动、小程序) ,以热门的互联网电商实际业务应用场景为案例讲解,对电商数据仓库的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:每日、月大盘收入报表、高付费用户分析报表、流量域多方位分析、营销域多方位分析、实时排行榜指标分析、用户主题分析、店铺主题时间区间分析等,数据分析涵盖全端(PC、移动、小程序)应用,与互联网企业大数据技术同步,让大家能够真正学到大数据企业级数据仓库的实战经验。 本课程凝聚讲师多年一线大数据企业实际项目经验,大数据企业在职架构师亲自授课,全程实操代码,带你体验真实的大数据开发过程,代码现场调试。通过本课程的学习再加上老师的答疑,你完全可以将本案例直接应用于企业。 课题二基于Flink+Hudi构建企业万亿级云上实时数据湖教程 随着互联网的发展,数据的不断膨胀,从刚开始的关系数据库到非关系数据库,再到大数据技术,技术的不断演进最终是随着数据膨胀而不断改变,最初的数据仓库能解决我们的问题,但是随着时代发展,企业已经不满足于数据仓库,希望有更强大的技术来支撑数据的存储,包括结构化,非结构化的数据等,希望能够积累企业的数据,从挖掘出更大的价值。基于这个背景,数据湖的技术应运而生。 本课程基于真实的企业数据湖案例进行讲解,结合业务实现数据湖平台,让大家在实践理解和掌握数据湖技术,未来数据湖的需求也会不断加大,希望同学们抓住这个机遇。 项目将以热门的互联网电商业务场景为案例讲解,具体分析指标包含:流量分析,订单分析,用户行为分析,营销分析,广告分析等,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。 课题三基于电商业务全链路数据台落地方案(全渠道、全环节、全流程) 在互联网发展浪潮数据对于企业的价值是非常大的,怎么管理好数据,以及快速挖掘数据价值,共享数据价值,急需一套解决方案,在数据开发,核心数据模型的变化是相对缓慢的,同时,对数据进行维护的工作量也非常大;但业务创新的速度、对数据提出的需求的变化,是非常快速的。数据台的出现,就是为了弥补数据开发和应用开发之间,由于开发速度不匹配,出现的响应力跟不上的问题。数据台解决的问题,包括:效率问题、协作问题、能力问题,数据台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念。 本课程基于真实企业数据台建设架构进行讲解,带大家构建数据台,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。 课程包含几大模块:数据源管理、数据接入管理、数据质量管理、数据质量报告、数据安全管理、数据查询IDE、数据血缘以及元数据管理、数据台实战应用等,对于数据台涉及到的业务以及技术进行详尽的讲解。
MySQL 教程MySQL 是流行的关系数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。在本教程,会让大家快速掌握 MySQL 的基本知识,并轻松使用 MySQL 数据库。什么是数据库?数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件,但是在文件读写数据速度相对较慢。所以,现在我们使用关系数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据数据。RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:1.数据以表格的形式出现2.每行为各种记录名称3.每列为记录名称所对应的数据域4.许多的行和列组成一张表单5.若干的表单组成databaseRDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:数据库: 数据库是一些关联表的集合。数据表: 表是数据的矩阵。在一个数据的表看起来像一个简单的电子表格。列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。主键:主键是唯一的。一个数据只能包含一个主键。你可以使用主键来查询数据。外键:外键用于关联两个表。复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。索引:使用索引可快速访问数据库表的特定信息。索引是对数据库表一列或多列的值进行排序的一种结构。类似于书籍的目录。参照完整性: 参照的完整性要求关系不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。MySQL 为关系数据库(Relational Database Management System), 这种所谓的关系型可以理解为表格的概念, 一个关系数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称;列(col): 具有相同数据类型的数据的集合;行(row): 每一行用来描述某条记录的具体信息;值(value): 行的具体信息, 每个值必须与该列的数据类型相同;键(key): 键的值在当前列具有唯一性。MySQL数据库MySQL 是一个关系数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 是开源的,目前隶属于 Oracle 旗下产品。MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。MySQL 使用标准的 SQL 数据语言形式。MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。MySQL 对PHP有很好的支持,PHP 是目前流行的 Web 开发语言。MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。Redis 教程REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
课程简介:  本项目课程是一门极具综合性和完整性的大型项目课程;课程项目的业务背景源自各类互联网公司对海量用户浏览行为数据和业务数据分析的需求及企业数据管理、数据运营需求。 本课程项目涵盖数据采集与预处理、数据仓库体系建设、用户画像系统建设、数据治理(元数据管理、数据质量管理)、任务调度系统、数据服务层建设、OLAP即席分析系统建设等大量模块,力求原汁原味重现一个完备的企业级大型数据运营系统。  拒绝demo,拒绝宏观抽象,拒绝只讲不练,本课程高度揉和理论与实战,并兼顾各层次的学员,真正从0开始,循序渐进,每一个步骤每一个环节,都会带领学员从需求分析开始,到逻辑设计,最后落实到每一行代码,所有流程都采用企业级解决方案,并手把手带领学员一一实现,拒绝复制粘贴,拒绝demo化的实现。并且会穿插大量的原创图解,来帮助学员理解复杂逻辑,掌握关键流程,熟悉核心架构。   跟随项目课程,历经接近100+小时的时间,从需求分析开始,到数据埋点采集,到预处理程序代码编写,到数仓体系搭建......逐渐展开整个项目的宏大视图,构建起整个项目的摩天大厦。  由于本课程不光讲解项目的实现,还会在实现过程反复揉和各种技术细节,各种设计思想,各种最佳实践思维,学完本项目并勤于实践的话,学员的收获将远远超越一个项目的具体实现,更能对大型数据系统开发产生深刻体悟,对很多技术的应用将感觉豁然开朗,并带来融会贯通能力的巨大飞跃。当然,最直接的收获是,学完本课程,你将很容易就拿到大数据数仓建设或用户画像建设等岗位的OFFER课程模块: 1. 数据采集:涉及到埋点日志flume采集系统,sqoop业务数据抽取系统等; 2. 数据预处理:涉及到各类字典数据构建,复杂结构数据清洗解析,数据集成,数据修正,以及多渠道数据的用户身份标识打通:ID-MAPPING等;3. 数据仓库:涉及到hive数仓基础设施搭建,数仓分层体系设计,数仓分析主题设计,多维分析实现,ETL任务脚本开发,ETL任务调度,数据生命周期管理等;4. 数据治理:涉及数据资产查询管理,数据质量监控管理,atlas元数据管理系统,atlas数据血缘管理等;5. 用户画像系统:涉及画像标签体系设计,标签体系层级关系设计,各类标签计算实现,兴趣类标签的衰减合并,模型标签的机器学习算法应用及特征提取、模型训练等;6. OLAP即席分析平台:涉及OLAP平台的整体架构设计,技术选型,底层存储实现,Presto查询引擎搭建,数据服务接口开发等;7. 数据服务:涉及数据服务的整体设计理念,架构搭建,各类数据访问需求的restapi开发等;课程所涉及的技术: 整个项目课程,将涉及到一个大型数据系统所用到的几乎所有主要技术,具体来说,包含但不限于如下技术组件:l Hadoopl Hivel HBasel SparkCore /SparkSQL/ Spark GRAPHX / Spark Mllibl Sqoopl Azkabanl Flumel lasal Kafkal Zookeeperl Solrl Prestop

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧