从联接表中删除实体而不影响父级 - EF Core 2.2
Posted
技术标签:
【中文标题】从联接表中删除实体而不影响父级 - EF Core 2.2【英文标题】:Remove entity from joint table without affecting parent - EF Core 2.2 【发布时间】:2021-09-05 03:12:09 【问题描述】:我遇到了多对多关系的问题,我不明白为什么会这样:
所以我有以下内容:
public class A
public Guid Guid get; set;
public ICollection<AB> ABs get; set;
public class B
public Guid Guid get; set;
public ICollection<AB> ABs get; set;
public class AB
public Guid Guid get; set;
public A A get; set;
public Guid A_Id get; set;
public B B get; set;
public Guid B_Id get; set;
internal static void OnModelCreating(ModelBuilder builder)
builder.Entity<AB>(entity =>
entity.HasIndex(e => new e.A_Id, e.B_Id).IsUnique();
entity.HasOne(e => e.A)
.WithMany(p => p.ABs)
.HasForeignKey(e => e.A_Id)
.OnDelete(DeleteBehavior.Restrict);
entity.HasOne(e => e.B)
.WithMany(w => w.ABs)
.HasForeignKey(e => e.B_Id)
.OnDelete(DeleteBehavior.Restrict);
);
我不断得到:
实体类型“A”和“AB”之间的关联已被切断,但 该关系要么标记为“必需”,要么隐含 需要,因为外键不可为空。如果 当需要关系时,应删除依赖/子实体 被切断,然后设置关系以使用级联删除。 考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”来 查看关键值。
问题是我想通过从 A.AB 中删除 AB 来打破关系,而 EF Core 试图删除 A。我不明白发生了什么。有什么想法吗?
最好的问候
【问题讨论】:
【参考方案1】:您为什么在 AB 类中进行模型创建?它应该在 dbcontext 中。
并尝试为您的 AB 类添加一个密钥。由于您使用的是 v.2.2,它将使 EF 更加可靠。
public class A
public Guid Id get; set;
public ICollection<AB> ABs get; set;
public class B
public Guid Id get; set;
public ICollection<AB> ABs get; set;
public class AB
public Guid Id get; set;
public A A get; set;
public Guid A_Id get; set;
public B B get; set;
public Guid B_Id get; set;
【讨论】:
关于模型创建在这个地方,因为我的团队选择这样做,我别无选择。 另外,我确实有 AB 类的 guid,我忘了添加它以上是关于从联接表中删除实体而不影响父级 - EF Core 2.2的主要内容,如果未能解决你的问题,请参考以下文章