gpt4 book ai didi

c# - 从多对多关系中仅删除一个条目

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:07 25 4
gpt4 key购买 nike

好的,所以我现在有这个问题。我有 2 个这样的模型:

public class Contact: BaseModel
{

public string LastName { get; set; }

public string FirstMidName { get; set; }

public string Adress { get; set; }
public int UserID { get; set; }

[Display(Name = "Full Name")]
public string FullName
{
get
{
return FirstMidName+ " " + LastName;
}
}

public virtual List<Group> Groups { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Phones> Phones { get; set; }
}

还有:

public class Group:BaseModel
{
public string Name { get; set; }
public int UserID { get; set; }
public virtual User User { get; set; }
public virtual List<Contact> Contacts { get; set; }

}

想法是许多联系人可以在多个组中。但是我的问题来了。我删除了多对多的 ondeleteCascade 约定,因为我不得不这样做,否则我的代码将无法工作。但是...我如何才能只删除一个联系人...如果它不级联并删除所有组 s 以及该组包含的所有联系人等等。那是我的问题我希望能够删除一个联系人而不是一个组。我不希望只删除联系人的群组。请帮忙

最佳答案

您应该只保留 cascade delete选项已转 on对于这种关系。

many-to-many关系中,任何一方都不“拥有”另一方。相反,该关系由称为“链接”表的第三方实体(隐藏在您的案例中)维护,因此例如删除联系人将简单地删除与该联系人相关联的组链接,而不是实际组实体。删除组时也是如此。

编辑:虽然以上一般适用,但事实证明实际问题是由两个 one-to-many 引起的问题中未提及的关系( User->ContactUser->Group )默认为 cascade delete转身 on .这会导致典型的多级联路径问题——删除 User 时记录,链接表GroupContact User->Contact->GroupContact 可以删除记录或 User->Group->GroupContact ,因此是一个多重删除路径。

所以你必须至少转动一个User->Contact , User->GroupContact<->Group关系cascade delete离开。不幸的是,这会导致维护问题,因为您将无法简单地删除所涉及的实体之一。因为我猜你不会经常删除用户,我建议你转User->Group relationship cascade delete 关闭并手动删除相关User.Groups在删除 User 之前.或者在 User 上放置一个删除触发器数据库里面的表。

关于c# - 从多对多关系中仅删除一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36567974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com