假设我想要通过EF插入/更新的记录很少。
public partial class Contact
{
public int ContactID { get; set; }
public string ContactPerson { get; set; }
public string EmailID { get; set; }
}
var _Contact = new list<Contact>();
_Contact.add(new Contact(){ContactID=1,ContactPerson="Dev",EmailID="d@gmail.com"});
_Contact.add(new Contact(){ContactID=2,ContactPerson="Ross",EmailID="a@gmail.com"});
_Contact.add(new Contact(){ContactID=3,ContactPerson="Martin",EmailID="b@gmail.com"});
_Contact.add(new Contact(){ContactID=4,ContactPerson="Moss",EmailID="c@gmail.com"});
_Contact.add(new Contact(){ContactID=5,ContactPerson="Koos",EmailID="q@gmail.com"});
在存储过程的帮助下,我们可以检测到是否存在任何特定记录,如果存在则会执行更新,如果不存在则会插入记录。我想通过EF做同样的事情.......有可能吗?
我知道我可以从EF调用SQL Server存储过程来实现我的目标,但我想知道我是否可以在EF中执行它而不调用存储过程?
如果是,那么用样本代码讨论相同的内容,检查db中是否存在每个记录,如果存在,那么它将更新否则将插入。寻求帮助。
答案 0 :(得分:1)
从EF 4.3开始,DbSet有一个AddOrUpdate ExtensionMethod。在命名空间System.Data.Entity.Migrations
中public partial class Contact
{
public int ContactID { get; set; }
public string ContactPerson { get; set; }
public string EmailID { get; set; }
}
var _Contact=new list<Contact>();
_Contact.add(new Contact(){ContactID=1,ContactPerson="Dev",EmailID="d@gmail.com"});
_Contact.add(new Contact(){ContactID=2,ContactPerson="Ross",EmailID="a@gmail.com"});
_Contact.add(new Contact(){ContactID=3,ContactPerson="Martin",EmailID="b@gmail.com"});
_Contact.add(new Contact(){ContactID=4,ContactPerson="Moss",EmailID="c@gmail.com"});
_Contact.add(new Contact(){ContactID=5,ContactPerson="Koos",EmailID="q@gmail.com"});
// check by Primary key
context.Contacts.AddOrUpdate(_Contacts)
// or check by EmailID
context.Contacts.AddOrUpdate(p => p.EmailID, _Contacts)