[英]Deleting only one entry from Many-to-Many relationship
好的,我现在有这个问题。 我有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; }
}
这个想法是许多联系人可以在许多组中。 但这是我的问题。 我删除了多个todleteCascade的约定,因为我必须以其他方式工作。 t work.But... how can i delete only one contact... without it cascading and deleting all the groups it
和所有的联系人组包含等等。 这s my problem i
希望能够删除一个联系人而不是一个组。 我不希望只删除联系人组。 请帮忙
您应该只为该关系on
cascade delete
选项。
在many-to-many
关系中,没有一方“拥有”另一方。 相反,该关系由称为“链接”表的第三个实体(隐藏在您的案例中)维护,因此例如删除联系人将简单地删除与该联系人关联的组链接 ,而不是实际的组实体。 删除组时也是如此。
编辑:虽然以上适用于一般情况,但事实证明,实际问题是由问题中未提及的两个one-to-many
关系( User->Contact
和User->Group
)引起的,默认情况下已将cascade delete
转为on
。 这导致了经典的多级联路径问题 - 当删除User
记录时,链接表GroupContact
记录可以通过User->Contact->GroupContact
或User->Group->GroupContact
删除,因此是多重删除路径。
因此,您必须关闭至少一个User->Contact
, User->Group
或Contact<->Group
cascade delete
off。 不幸的是,这会导致维护问题,因为您无法简单地删除其中一个涉及的实体。 由于我猜你不是经常删除用户,我建议你关闭User->Group
关系级联删除,并在删除User
之前手动删除相关的User.Groups
。 或者在数据库内的User
表上放置一个删除触发器。
您需要考虑数据的结构。 为什么每个联系人都必须保存所有组的列表? 通过这样做,系统中的每个联系人都会保存有关其他联系人的所有信息,包括他自己。
这是SQL告诉你数据关系没有意义的方法。
为什么不让每个组都列出其组中所有联系人的列表?
这是你的第一个选择,但如果你真的需要做这个工作,可能你想建立一个映射表 。 周围有很多这样的例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.