所以我是ASP.NET MVC的新手,我正在尝试实现一个地址管理器。我正在使用Linq2Entity Framework。我有一张有联系人的桌子和一张有电话号码的桌子。这两个表由contact_has_phone_number表链接。实体框架使我能够获得分配给一个联系人的所有电话号码。这是通过调用contact.PhoneNumbers来完成的,它返回一组电话号码。使用contact.PhoneNumber.Add(number)添加一个新数字。问题是我在电话号码表中收到重复的电话号码条目。我想得到的是,现有的电话号码只能在contact_has_phone_number表中链接。 例如:
表“联系”
ID_Contact | First_Name | Last_Name
1 | Jeff | Bridges
2 | Peter | Miller
表“contact_has_phone_number”
ID_Contact | ID_Number
1 | 1
1 | 2
2 | 1
表“phone_number”
ID_Number | Number
1 | 1234567
2 | 7654321
在momonet,我会在“phone_number”表中获得3行,其中2行具有相同的数字。
ID_Number | Number
1 | 1234567
2 | 7654321
3 | 1234567
如果你可以帮助我,那将是一个爆炸。
答案 0 :(得分:0)
这是多种多样的情况。我遇到过这种情况(不是与联系人有关),这就是我所做的。
在创建新联系人时,我会提供联系方式和电话号码。以下代码可以使用
public void AddNewContact(Contact contact)
{
var storedPhones = context.PhoneNumbers.Select(s => s).ToList();
foreach (var s in contact.PhoneList)
{
var p = s.PhoneNumber;
var storedPhone = storedPhone s.Where(f => f.PhoneNumber == p).Select(t => t).FirstOrDefault();
if (storedPhone == null)
{
var newPhoneNumber = MySqlEFModel.PhoneNumber.CreatePhoneNumber(Guid.NewGuid(), p);
context.AddToPhoneNumbers(newPhone);
contact.PhoneNumbers.Add(newPhone);
}
else
{
contact.PhoneNumbers.Add(storedPhone);
}
}
context.AddToContacts(contact);
context.SaveChanges();
}
编辑:
我应该在循环之前的方法开头做到这一点。
var newContact = MySqlEFModel.Contact.CreateContact(keyfields, ... ... , ...);
然后,行
contact.PhoneNumbers.Add(storedPhone);
将成为
newContact.PhoneNumbers.Add(storedPhone);