【问题标题】:Deleting Entries In A Junction Table In Entity Framework 6在实体框架 6 中删除连接表中的条目
【发布时间】:2015-07-15 20:55:13
【问题描述】:

这是关于实体框架 (EF) 版本 6 的问题。

我有三张桌子。 TableA、TableB 和 TableJ 是这样的:

TableA
int Id (primary key)

TableB
int Id (primary key)

TableJ
int TableAId (primary key)
int TableBId (primary key)

表 J 是表 A 和表 B 之间的连接/映射/多对多表。注意没有外键。在 EF 中映射这些表,我有以下代码:

public partial class A
{
    public int Id { get; set; }
    public virtual DbSet<B> Bs { get; set; }
}

public partial class B
{
    public int Id { get; set; }
    public virtual DbSet<A> As { get; set; }
}

我面临的问题是我不知道如何删除联结/映射/多对多表中的条目。例如,此代码不会删除任何内容:

var a = db.As.Find(id);
a.Bs.Clear();
db.SaveChanges();

我需要怎么做才能删除联结/映射/多对多表中的条目?

【问题讨论】:

    标签: c# sql sql-server entity-framework visual-studio


    【解决方案1】:

    Clear() 从上下文的角度来看实际上对对象没有任何影响,它只是清除任何现有元素的内存集合;相反,你会做这样的事情:

    var a = db.As.Find(id);
    var removals = a.Bs.ToList(); //or you could filter to only remove B objects matching a specific criteria, etc.
    foreach (var remove in removals)
    {
       a.Bs.Remove(remove);
    }
    db.SaveChanges();
    

    这会在a 中实现所有Bs,然后从a.Bs 集合中删除每一个- 然后当您SaveChanges 时,这些对象将从数据库中删除。

    顺便说一句,我们首先实现的原因是因为我们不能同时枚举a.Bs中删除,否则我们会得到旧的“枚举期间修改集合”错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      相关资源
      最近更新 更多