如何使用实体框架更新当前实体

时间:2018-05-10 13:24:59

标签: c# entity-framework

我有一个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 :(得分:0)

如果要使用EF实现upsert,则需要

  1. 搜索具有相同主键的实体
  2. 如果找不到您创建的实体并添加新实体(不保存),
  3. 编写实体属性和
  4. 的SaveChanges
  5. 有些变体但使用EF需要访问数据库才能知道是否需要插入或修改实体。