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

如何在多对多关系中保存EF Core 3.1.3中的更改?

在EF Core 3.1.3中,可以使用以下步骤来保存多对多关系中的更改:

  1. 创建一个新的实体对象,表示多对多关系的连接表。这个实体对象应该包含两个外键属性,分别指向两个相关实体对象的主键。
  2. 在DbContext中定义一个DbSet,表示连接表的实体集合。
  3. 在两个相关实体对象中,添加一个ICollection属性,用于存储与另一个实体对象的多对多关系。这个属性应该是虚拟的,并且应该被标记为[InverseProperty],指向连接表实体对象的集合属性。
  4. 在连接表实体对象中,添加两个导航属性,分别指向两个相关实体对象。这些属性应该是虚拟的,并且应该被标记为[ForeignKey],指向相关实体对象的外键属性。
  5. 在保存更改之前,确保所有相关实体对象和连接表实体对象都已添加到DbContext中。
  6. 创建一个新的连接表实体对象,并设置相关实体对象和外键属性的值。
  7. 将连接表实体对象添加到DbContext的连接表实体集合中。
  8. 保存更改,调用DbContext的SaveChanges方法。

以下是一个示例代码,演示如何在多对多关系中保存更改:

代码语言:txt
复制
// 定义连接表实体对象
public class Relationship
{
    public int Entity1Id { get; set; }
    public int Entity2Id { get; set; }

    public virtual Entity1 Entity1 { get; set; }
    public virtual Entity2 Entity2 { get; set; }
}

// 定义相关实体对象
public class Entity1
{
    public int Id { get; set; }
    public string Name { get; set; }

    [InverseProperty("Entity1")]
    public virtual ICollection<Relationship> Relationships { get; set; }
}

public class Entity2
{
    public int Id { get; set; }
    public string Name { get; set; }

    [InverseProperty("Entity2")]
    public virtual ICollection<Relationship> Relationships { get; set; }
}

// 在DbContext中添加DbSet和连接表实体集合
public class MyDbContext : DbContext
{
    public DbSet<Entity1> Entity1s { get; set; }
    public DbSet<Entity2> Entity2s { get; set; }
    public DbSet<Relationship> Relationships { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Relationship>()
            .HasKey(r => new { r.Entity1Id, r.Entity2Id });

        modelBuilder.Entity<Relationship>()
            .HasOne(r => r.Entity1)
            .WithMany(e => e.Relationships)
            .HasForeignKey(r => r.Entity1Id);

        modelBuilder.Entity<Relationship>()
            .HasOne(r => r.Entity2)
            .WithMany(e => e.Relationships)
            .HasForeignKey(r => r.Entity2Id);
    }
}

// 在保存更改时创建连接表实体对象并添加到DbContext中
using (var context = new MyDbContext())
{
    var entity1 = new Entity1 { Name = "Entity 1" };
    var entity2 = new Entity2 { Name = "Entity 2" };

    context.Entity1s.Add(entity1);
    context.Entity2s.Add(entity2);

    var relationship = new Relationship
    {
        Entity1 = entity1,
        Entity2 = entity2
    };

    context.Relationships.Add(relationship);

    context.SaveChanges();
}

这样,EF Core 3.1.3会自动处理多对多关系的保存和更新。在这个示例中,我们创建了一个连接表实体对象Relationship,表示Entity1和Entity2之间的多对多关系。通过添加Relationship对象到DbContext的Relationships集合中,EF Core会自动保存这个多对多关系的更改。

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

相关·内容

EF Core如何处理关系

目录 一、解决 二、增 三、查 四、删 EF Core在处理关系时并不像一一和一关系那样好处理,下面我们利用一个简单电子商城购物车来讲解一下吧。...聪明同学一定想到了我们可以手动创建另一个中间表,它将建立ShoppingCart和Commodity关系。...ShoppingCart没有主键,由于关系因此ShoppingCart应该是复合主键。复合主键由两列组成一个主键,在EF Core创建复合键唯一办法是在OnModelCreating创建。...Core处理问题。...解决了创建表问题,下面我们就来看一下如何进行增删查。 二、增 我们要把商品添加到购物车,我们需要创建ShoppingCartCommodity并保存它。

2K30
  • 如何处理EF Core关系

    关系不像其他关系那么简单,在这篇文章,我将向您展示如何创建关系以及如何在 EF Core 中使用它们。 模型 简单而实用例子可能是某种数字电子商务商店。...在本文发表时,EF Core 无法处理这种情况。...看起来EF Core不知道如何处理这种关系,当您尝试添加迁移时,您会得到以下结果: Unable to determine the relationship represented by navigation...插入 假设我们已经有Cart和Item在我们数据库,现在我们想将特定商品(Item)添加到特定购物车(Cart),为了做到这一点,我们需要创建新CartItem并保存它。...从删除 删除是指删除购物车Cart和商品Item之间关系CartItem。

    3K20

    Hibernate 一、 关联关系 配置

    one-to-many : 表明 tblFwxxes 集合存放是一组 TblFwxx 对象。 ---- 其中: inverse: 表示关系维护由谁来执行。...not-null="true" /> ---- 对于双向关系...在数据库设计时,需要设计一个中间表 teacher_student ,通过中间表描述学生表和老师表关系。...其映射文件配置方式与一很类似,也需要一个 class 属性来设置关联属性类型,column 属性用来设定哪个字段去做外键关联,最后,根据业务需要,将某一方inverse 属性设置为false。...---- 1、这里比一多关联一个 table 属性,table 指向数据库建立关联那张表。 2、Key column : 关联表中和 student 表发生关系字段。

    3.1K20

    JDBC上关于数据库多表操作一关系关系实现方法

    我们知道,在设计一个Java bean时候,要把这些BEAN 数据存放在数据库表结构,然而这些数据库表直接又有些特殊关系,例如员工与部门直接有一关系,学生与老师直接又多关系,那么这些表关系如何表示呢...首先在建立数据库时候就应该建立这样对应关系。...一 ,只要建立两个表就能建立这样关系,因为你可以把多方那个表设置一个Foreign Key 属性 ,下面是一个部门和员工表结构关系 在MySQL 数据库上应该这样建立表结构: create table...public List findDepts() { return findDepts(true); } } 关系 下面以老师和学生关系来说明这个结构...(某些驱动并不支持只读模式,:Informix) defaultReadOnly= #driver default 指定由连接池所创建连接事务级别(TransactionIsolation)。

    3.6K70

    Redis处理频道与订阅者之间关系,它与消息队列异同之处

    图片在Redis,可以使用发布-订阅(Pub/Sub)模式来处理频道与订阅者之间关系。首先,使用命令SUBSCRIBE订阅一个或多个频道,让订阅者关注感兴趣频道,并接收推送消息。...此时,订阅者A就可以收到来自频道channel1消息"Hello, World!"。Redis支持关系,即一个频道可以有多个订阅者,一个订阅者也可以订阅多个频道。...可以使用如下示例表示关系处理过程:订阅者A:执行命令 - `SUBSCRIBE channel1`订阅者B:执行命令 - `SUBSCRIBE channel1`发布者B:执行命令 - `PUBLISH...都可以实现消息可靠传递机制。不同点:数据结构不同:Redis发布与订阅机制是基于发布与订阅模型,消息队列是基于队列结构。...顺序性不同:Redis发布与订阅机制不保证消息顺序传递,而消息队列可以保证消息有序传递。重试机制不同:Redis发布与订阅机制不支持消息重试机制,而消息队列可以通过重试机制来处理失败消息。

    43451

    【ASP.NET Core 基础知识】--数据库连接--使用Entity Framework Core进行数据库访问

    ORM 核心概念包括: 对象(Objects): 在应用程序中表示业务实体。 关系(Relationships): 对象之间交互和联系,例如一、一一或关系。...在 Entity Framework CoreEF Core,ORM 概念依然适用,EF Core 提供了 ORM 功能,允许开发者使用 .NET 类型(类和对象)来表示数据库表格和数据,...此外,EF Core 支持保存点(Savepoint),这是一种在事务创建一个可回滚子事务点机制。如果操作失败,你可以回滚到最近创建保存点,而不是回滚整个事务。...以下是一个简单示例,演示了如何在 EF Core 中进行跨数据库操作: 安装相应数据库提供程序 NuGet 包。...文章首先介绍了EF Core基本概念,然后讲解了EF Core连接数据库,如何在多数据库环境下使用EF Core,以及需要注意性能和兼容性问题。

    45500

    一步步学习EF Core(3.EF Core2.0路线图)

    以下是EF Core路线图。请注意,功能计划可能会更改。 这跟任何项目一样,很难准确地预测什么时候会确定。...因为EF Core是一个新代码库,所以在Entity Framework 6.x存在一个功能并不意味着会在EF Core实现。...其中一部分已经在预览1完成了 存储过程映射,允许EF使用存储过程来保存对数据库更改(FromSql已经提供了使用存储过程进行查询良好支持)。...简单类型转换,string => xml。 关系没有连接实体。可以与连接实体建立关系关系数据库替代继承映射模式,例如每种类型表(TPT)和每个具体类型TPC表。...从数据库更新模型(#831) - 允许您逐渐更新以前从数据库反向设计模型,并更改了对数据库模式所做更改。这允许您更新模型以匹配当前模式,而不会丢失在反向设计后手动模型进行任何更改

    3.1K90

    EF Core 入门

    EF可以在不使用任何配置前提下,自动解析类与表之间映射(具体映射逻辑与我们手写ORM工具类一致或相近)。 自动跟踪更改。...在直接使用通过EF获取元素时,EF会自动跟踪哪些字段发生了变化,当手动调用保存时候,EF就会把数据回传给数据库。...可以延迟加载需要数据,外键引用属性、查询结果等 丰富映射关系,支持一一,一,甚至继承、单表实例等 可以使用Linq 进行查询 非Core可以通过数据库表生成实体类,两种都可以通过实体类生成表...因为EF更多是基于.NET Framework开发,所以微软以EF为基础针对.net core做了一定修改,然后EF Core诞生了。可以说EF Core是专门为.net core开发。...new DefaultContext(); //添加 context.Add(new ModelA { Id = 10, Name = "测试" }); context.SaveChanges();//保存数据到数据库

    2.4K10

    01-EF Core笔记之创建模型

    EF是实体框架,它实体会映射到关系型数据库。所以通过关系型数据库表之间关系更容易理解实体关系。...在数据库,数据表之间关系可以分为一一、一三种,在实体之间同样有这三种关系,但是EF Core仅支持一一、一关系,如果要实现关系,则需要通过关系实体进行关联。...关系需要我们定义一个关系表来完成。...CreateTime值,并自动保存到数据库,但是值仅在Context中生成,无法保存到数据库。...继承 关于继承关系何在数据库呈现,目前有三种常见模式: TPH(table-per-hierarchy):一张表存放基类和子类所有列,使用discriminator列区分类型,目前EF Core

    3.1K20

    2022年了有哪些值得推荐.NET ORM框架?

    EF/EF Core Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版常用 Entity Framework 数据访问技术,EF Core 是适用于 .NET 现代对象数据库映射器...EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点: 使 .NET 开发人员能够使用 .NET 对象处理数据库。 无需再像通常那样编写大部分数据访问代码。...EntityFramework.Exceptions - 当您SQL查询违反SqlServer,MySql或PostgreSQL数据库约束时,请EntityFrameworkCore使用类型化异常处理...ShardingCore - EF Core分表分库读写分离扩展。...PgSql 数组类型等; 支持 丰富表达式函数,以及灵活自定义解析; 支持 导航属性一贪婪加载,以及延时加载; 支持 读写分离、分表分库、过滤器、乐观锁、悲观锁; 支持 MySql/

    5.9K11

    2022年了有哪些值得推荐.NET ORM框架?

    EF/EF Core Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版常用 Entity Framework 数据访问技术,EF Core 是适用于 .NET...EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点: 使 .NET 开发人员能够使用 .NET 对象处理数据库。 无需再像通常那样编写大部分数据访问代码。...EntityFramework.Exceptions - 当您SQL查询违反SqlServer,MySql或PostgreSQL数据库约束时,请EntityFrameworkCore使用类型化异常处理...ShardingCore - EF Core分表分库读写分离扩展。...,比如 PgSql 数组类型等; 支持 丰富表达式函数,以及灵活自定义解析; 支持 导航属性一贪婪加载,以及延时加载; 支持 读写分离、分表分库、过滤器、乐观锁、悲观锁

    3.8K20

    02-EF Core笔记之保存数据

    EF Core通过ChangeTracker跟踪需要写入数据库更改,当需要保存数据时,调用DbContextSaveChanges方法完成保存。...,只需将Post对象Blog引用设置为null即可,此时EF Core将判断是否为必须关系,如果为必须关系,则从数据库删除Post对象,如果为非必须关系,则将数据库对应外键设置为null。...需要注意是,EF Core删除行为仅对已加载数据生效,如果关系未加载到内存,则超出了EF Core管控范围。 事务 事务允许以原子方式处理多个数据库操作。...默认情况下,每次SaveChanges方法保存所有更改都将在一个事务,要么全部保存成功,要么全部保存失败。此种情况已能满足大多数应用需要。...这里需要探讨是,当依赖关系列表进行部分删除,如何进行更新问题。

    1.8K40

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

    对于习惯使用 EF Core关系数据开发者来说,这看起来似乎有些奇怪。获取 Issue 所有数据是没有必要且低效。为什么我们不直接执行一个SQL插入命令到数据库,而不查询任何数据呢?...保存更改到数据库。 EF Core 提供 变更跟踪(Change Tracking)功能,实际上你不需要调用 _issueRepository.UpdateAsync(...) 方法,会自动进行保存。...如果用例使用单个聚合,读取并保存为单个单元,那么聚合对象所做所有更改,将作为原子操作保存,而不需要显式地使用数据库事务。...用于 EF Core关系型数据库 在 MongoDB ,自然不适合有这样导航属性/集合。...然而,EF Core关系型数据库开发者可能会发现这个限制性规则是不必要,因为 EF Core 可以在数据库读写处理它。

    3.1K30

    .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst

    从这篇ORM完成之后就将进入asp.net core学习总结! EFCore Entity Framework Core (EF Core) 是适用于 .NET 新式对象数据库映射器。...基于该比较,EF Core 检测变化,并添加适当迁移而不是再重新生成数据库。 最后运行命令Update-Database生成数据库和表,数据库在我们配置程序路径下。...我认为EFCore重要知识点包括但不限于: EFCore约定大于配置,比如模型如果有Id字段默认就是主键。 一关系配置和获取,上面示例中学生有哪些课程就是一,查询关联要用includ。...多个外键字段配置。 一关系。...AsNoTracking使用,EFCore默认会跟踪实体,也就是保存在内存,用于更新删除等操作。如果只是查询数据而不用跟踪则使用AsNoTracking查询。 并发控制。 .....

    2.8K30

    UnitOfWork知多少

    UOW模式作用是在业务用例操作中跟踪对象所有更改(增加、删除和更新),并将所有更改对象保存在其维护列表。在业务用例终点,通过事务,一次性提交所有更改,以确保数据完整性和有效性。...UOW本质 通过以上介绍,我们可以总结出实现UOW几个要点: UOW跟踪变化 UOW维护了一个变更列表 UOW将跟踪到已变更对象保存到变更列表 UOW借助事务一次性提交变更列表所有更改...EFUOW 每个DbContext类型实例都有一个ChangeTracker用来跟踪记录实体变化。当调用SaveChanges时,所有的更改将通过事务一次性提交到数据库。...从代码我们可以看出仅做了一次保存,新增加User、Customer、Address对象都成功持久化到了内存数据库。从而证明EF Core是实现了Uow模式。...实现UOW 通过第3节说明我们已经知道,EF Core已经实现了UOW模式。而为了确保领域层透明进行持久化,我们其进行了更高一层抽象,实现了仓储模式。

    2.4K81
    领券