【发布时间】:2021-06-12 04:48:36
【问题描述】:
我有一个包含多个联系人的客户联系人页面。如果我删除第一个联系人,它会显示 count == null 错误。因此,如果我在 null 发生时使用循环删除第一个联系人,它会删除其余联系人,因为每个联系人都有一个客户关系。
if (cusmodel.LstContacts != null)
{
db.Contacts.RemoveRange(db.Contacts.Where(d => d.ContactID == cus.Contact));
}
这也是目前删除亲密接触的代码。但是此代码不会删除第一个联系人,因为计数将为空。 下面我将提供更新和删除联系人的完整代码
if (cusmodel.LstContacts != null && cusmodel.LstContacts.Count > 0)
{
long contactId = 0;
long[] contactRelationids = new long[cusmodel.LstContacts.Count];
int rowRelationcount = 0;
foreach (var item in cusmodel.LstContacts)
{
var contact = new Contact
{
ContactID = item.ContactID,
Name = item.FirstName + " " + item.LastName,
Address = item.Name,
City = cusmodel.City,
State = cusmodel.State,
Country = item.Country,
Zip = cusmodel.Zip,
FirstName = item.FirstName,
LastName = item.LastName,
TypeOfContact = item.TypeOfContact,
Mobile = item.Mobile,
Phone = item.Phone,
Fax = cusmodel.Fax,
EmailId = item.EmailId,
Reference = cusmodel.Reference,
ContactPerson = cusmodel.ContactPerson,
Website = item.Website,
Group = 2,
Status = Status.active,
CountryID = item.CountryID,
ContactTypeID = item.ContactTypeID
};
if (item.ContactID > 0)
{
contact.ContactID = item.ContactID;
db.Entry(contact).State = EntityState.Modified;
db.SaveChanges();
}
else
{
db.Contacts.Add(contact);
db.SaveChanges();
contactId = contact.ContactID;
}
var ContactReltion = (from a in db.ContactRelation
where a.RelationID == id && a.RelationType == (long)ContctRelation.Customer && a.ContactID == contact.ContactID
select new
{
a.ContactRelationID,
a.ContactID,
a.RelationType,
a.RelationID
}).FirstOrDefault();
ContactRelation Relation = new ContactRelation();
Relation.ContactID = contact.ContactID;
Relation.RelationType = (long)ContctRelation.Customer;//for customer
Relation.RelationID = CustId;
if (ContactReltion != null && ContactReltion.ContactRelationID > 0)
{
Relation.ContactRelationID = ContactReltion.ContactRelationID;
db.Entry(Relation).State = EntityState.Modified;
db.SaveChanges();
contactRelationids[rowRelationcount] = ContactReltion.ContactRelationID;
rowRelationcount++;
}
else
{
db.ContactRelation.Add(Relation);
db.SaveChanges();
contactRelationids[rowRelationcount] = Relation.ContactRelationID;
rowRelationcount++;
}
}
//delete
if (contactRelationids != null && contactRelationids.Count() > 0)
{
var results = db.ContactRelation.Where(x => !contactRelationids.Contains(x.ContactRelationID)
&& x.RelationType == (int)ContctRelation.Customer
&& x.RelationID == cus.CustomerID
);
if (results != null && results.Count() > 0)
{
foreach (var item in results)
{
ContactRelation contactRelation = db.ContactRelation.Find(item.ContactRelationID);
if (contactRelation != null)
{
db.ContactRelation.Remove(contactRelation);
}
Contact contact1 = db.Contacts.Find(item.ContactID);
if (contact1 != null)
{
db.Contacts.Remove(contact1);
}
}
db.SaveChanges();
}
}
}
【问题讨论】:
-
我不确定这些空检查是否有任何意义。我也不确定你如何让 Count() 返回 null ..
-
你到底想做什么?您的问题似乎主要是一堆“不起作用”的相当荒谬的代码;你最好告诉我们你有什么目标以及你希望实现什么
-
为了您的方便,我已经放了完整的更新代码
-
那么您的代码中的错误在哪里?能够粘贴实际的错误消息并指出代码的哪一部分抛出错误?
标签: c# .net entity-framework linq