我是第一次使用ado.net实体框架,在将此记录插入数据库之前,我需要检查它是否存在。我最好搜索authodssid是否存在,而不是键(authord)。我使用的是vs2010,framework4。system.data.entity为3.5.0.0。
我搜索了一下,但没有找到这个问题的答案。
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
}
5条答案
按热度按时间rmbxnbpk1#
检查记录是否存在的唯一方法是查询该记录并查看是否有返回的内容:
aelbi1ox2#
这样的方法应该有用:
根据我的理解(尽管是基本的),这应该会产生一个sql语句,相当于:
另一个更简单的方法是使用
Any
扩展方法:q5iwbnjs3#
从.net的Angular 来看,我个人更喜欢这种方法。它更干净,如果你关心速度(在.net中),它更高效,但是sql不是那么快;
因此,对于高效的sql语句,以下是最好的:
0vvn1miw4#
EFV5.0中提供了所谓的“upsert”操作+
addorupdate可以在“system.data.entity.migrations”命名空间中找到,因此不要忘记添加:
addorupdate操作不是原子的。但是*if(existingauthorcount==0){//do your insert}也不是。
pb3skfrl5#
你所需要做的就是(用linq)搜索一个有这个id的作者。
这个
Where()
方法将返回您只需要一个作者的集合,因此使用FirstOrDefault()
返回第一个元素,如果没有则返回null。你也可以用SinglOrDefault
如果列表中有多个元素,则抛出异常,或者仅返回该元素。似乎@jacob有一个很好的,更有效的方法!