首页
学习
活动
专区
工具
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会自动保存这个多对多关系的更改。

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

相关·内容

领券