我需要删除已经与之创建事件的联系人,数据保存方式的结构如下
事件表
联系人表
我有一个名为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();
}
如果没有使用该用户创建的事件,则此代码可以正常工作,但是如果我将用户添加到事件中,然后删除该用户,则此代码将无法正常工作。我该如何解决?
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
我还没有测试代码,但这应该可以让您了解从事件中删除联系人的想法,然后再删除联系人本身。
using (var db= new DatabaseModel())
{
Contact contact = db.Contacts.Find(id);
if (contact != null) {
db.Events.Where(x => x.contacts.Contains(contact)).ForEach(x => x.contacts.Remove(contact));
db.SaveChanges();
db.Contact.Remove(contact);
db.SaveChanges();
}
}