在插入新记录之前检查记录是否存在

Bir*_*rey 11 c# entity-framework

我第一次使用Ado.net实体框架,我需要在将其插入数据库之前检查该记录是否存在.我最好搜索是否存在AuthodSSID而不是密钥(AuthorID).我正在使用VS2010,Framework 4. System.Data.Entity是3.5.0.0.

我用Google搜索,但没有找到这个问题的答案.

PublishingCompanyEntities publishContext;
publishContext = new PublishingCompanyEntities();

private void createNew_Click(object sender, EventArgs e)
{
    Author newAuthor = new Author();
    newAuthor.FirstName = firstName.Text;
    newAuthor.LastName = lastName.Text;
    newAuthor.AuthodSSID = 20;
    newAuthor.AuthorID = 10
//Check if record exist here
    publishContext.AddToAuthor(newAuthor);//insert if does not exist

}
Run Code Online (Sandbox Code Playgroud)

Jac*_*cob 16

检查记录是否存在的唯一方法是查询记录并查看是否有任何回复:

var existingAuthorCount = publishContext.Author.Count(a => a.AuthodSSID == 20);
if (existingAuthorCount == 0) 
{
    // Do your insert
}
Run Code Online (Sandbox Code Playgroud)

  • 你能否在EF中使用publishContext.Author.Any(a => a.AuthodSSID == 20)或.Any()不可用? (4认同)

M.B*_*ock 12

这样的事情应该有效:

if (publishContext.Author.Select(a => a.AuthodSSID).Where(id => id == 20).Take(1) == null)
    // It doesn't exist
else
    // It does exist
Run Code Online (Sandbox Code Playgroud)

基于我(尽管是基本的)理解,这应该产生一个等同于的SQL语句:

SELECT TOP(1) AutodSSID FROM Author WHERE AuthodSSID = 20;
Run Code Online (Sandbox Code Playgroud)

另一种更简单的方法可能是使用Any扩展方法:

if (!publishContext.Author.Any(a => a.AuthodSSID == 20))
    // Put your insert logic here.
Run Code Online (Sandbox Code Playgroud)