【问题标题】:Entity Framework Error Deleting Objects With Foreign Keys实体框架错误删除具有外键的对象
【发布时间】:2020-03-27 05:57:08
【问题描述】:

我需要删除一个已经创建事件的联系人,数据保存的结构如下

事件表

联系人表

我有一个名为 EventContacts 的单独表,用于管理事件和联系人之间的关系

事件类

public class Events
    {

        [Key]
        public string id { get; set; }
        public string title{ get; set; }
        public string desc{ get; set; }
        public virtual List<Contact> contacts{ get; set; }
    }

联系人类

public class Contact
    {
        public string ContactId { get; set; }  
        public string name{ get; set; }
        public string email{ get; set; }
    }

我使用此代码删除联系人

using (var db= new DatabaseModel())
{
     Contact contact = db.Contacts.Find(id);
     db.Contact.Remove(contact);
     db.SaveChanges();
}

要添加一个事件,我使用这个

List<Contact> cons = new List<Contact>();
foreach (ComboItem cmb in cbItems)
{
   EventContact evntConts = new EventContact()
   {
      contId = cmb.contId,
      evntId = eventidevntId
      userId = userId,
    };

    cons.Add(evntConts);
}
UserEvent events = new UserEvent()
{
   eventid= this.evntid,
   title= txt_title.Text,
   description = txt_des.Text,
   evcontacts = cons
};



using (var db= new DatabaseModel())
{
   db.Evnts.Add(evnt);
   db.SaveChanges();
}

如果没有使用该用户创建的事件,则此代码可以正常工作,但如果我将用户添加到事件然后删除用户,则此代码不起作用。我该如何解决?

【问题讨论】:

  • 我建议进行检查,看看联系人是否是任何事件的成员。如果不是,则删除。否则,您将删除在另一个表中有引用的帐户。另一个建议是将该用户从其所属的所有事件中删除.. 然后删除联系人。
  • 您能否按照您在此处提到的顺序发布代码(将用户添加到事件然后删除)。另外,请发布错误消息。
  • @sam 我编辑了问题

标签: c# database winforms linq


【解决方案1】:

如果有外键并且你有记录-需要先删除(需要先对Event-contacts进行操作),然后再尝试删除Contacts。

using (var db= new DatabaseModel())
{
     Contact contact = db.Contacts.Find(id);
     if(contact != null){
     EventContact eventContact = db.EventContacts.Where(x=>x.contactId == 
        contact.Id).ToList();
      foreach(var item in eventVContact){
        db.contact.Remove(item);
        db.SaveChanges();
       }
     }
     if(eventContact?.Any()??true){
      db.Contact.Remove(contact);
      db.SaveChanges();
     }

}

【讨论】:

  • 我将联系人添加到上下文中,然后运行它,这很有效,所以我接受了这个作为答案。谢谢!!!
猜你喜欢
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多