繁体   English   中英

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

[英]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->ContactUser->Group )引起的,默认情况下已将cascade delete转为on 这导致了经典的多级联路径问题 - 当删除User记录时,链接表GroupContact记录可以通过User->Contact->GroupContactUser->Group->GroupContact删除,因此是多重删除路径。

因此,您必须关闭至少一个User->ContactUser->GroupContact<->Group cascade delete off。 不幸的是,这会导致维护问题,因为您无法简单地删除其中一个涉及的实体。 由于我猜你不是经常删除用户,我建议你关闭User->Group关系级联删除,并在删除User之前手动删除相关的User.Groups 或者在数据库内的User表上放置一个删除触发器。

您需要考虑数据的结构。 为什么每个联系人都必须保存所有组的列表? 通过这样做,系统中的每个联系人都会保存有关其他联系人的所有信息,包括他自己。

这是SQL告诉你数据关系没有意义的方法。

为什么不让每个组都列出其组中所有联系人的列表?

这是你的第一个选择,但如果你真的需要做这个工作,可能你想建立一个映射表 周围有很多这样的例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM