ASP.NET MVC和实体框架。如何避免重复行?

时间:2011-03-07 20:14:32

标签: asp.net-mvc linq entity-framework

所以我是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  

如果你可以帮助我,那将是一个爆炸。

1 个答案:

答案 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);