Как обновить текущие объекты, используя структуру объекта - PullRequest
0 голосов
/ 10 мая 2018

У меня есть служба Gmail, которая возвращает мне имена и номера телефонов моих контактов. для хранения этой информации в моей базе данных я создал два простых класса poco

так что я хочу сделать: 1 - чтобы избежать дубликатов 2- Я могу обновить информацию о контактах в Gmail, поэтому в следующий раз, когда я вызову указанную ниже функцию, я бы хотел обновить контакты. как мне это сделать?

public class CONTACTS_INFO
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CI_ROWID { get; set; }

    public int CI_CONTACT_REFNO { get; set; }

    public string CI_PHONE_NUMBERS { get; set; }
}

public class GMAIL_CONTACTS
    {
        public GMAIL_CONTACTS()
        {
            CONTACTS_INFO = new List<CONTACTS_INFO>();
        }
        [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int GC_ROWID { get; set; }

        public string GC_CONTACT_NAME { get; set; }

        [ForeignKey("CI_CONTACT_REFNO")]
        public List<CONTACTS_INFO> CONTACTS_INFO { get; set; }
    }

следующий мой метод

using (var context = new MPContext())
            {

                foreach (var contact in cr.GetContacts().Entries)
                {
                    if (string.IsNullOrEmpty(contact.Name.FullName)) continue;
                    var gContacts = new GMAIL_CONTACTS { GC_CONTACT_NAME = contact.Name.FullName };

                    foreach (var phonenumber in contact.Phonenumbers)
                    {
                        if (string.IsNullOrEmpty(phonenumber.Label)) continue;
                        gContacts.CONTACTS_INFO.Add(new CONTACTS_INFO { CI_PHONE_NUMBERS = phonenumber.Value + phonenumber.Label });
                    }
                   //Here I would like to do two things
                   //1-Check if I have this contact in database so I wont save it
                   //2-I may change information on the gmail so I would like to update my contacts 
                        context.GMAIL_CONTACTS.Add(gContacts);                       
                }
                context.SaveChanges();
            }      

1 Ответ

0 голосов
/ 13 мая 2018

Если вы хотите реализовать upsert с EF, вам нужно

  1. найти объект с тем же первичным ключом,
  2. Если вы не найдете созданную вами сущность идобавить новый (без сохранения),
  3. записать свойства объекта и
  4. SaveChanges

Существуют варианты, но для использования EF вам необходим доступ к базе данных, чтобызнать, нужно ли вам вставить или изменить объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...