【发布时间】:2011-09-30 16:28:33
【问题描述】:
我有一个街道表,它有两个字符串列组合作为 PK,邮政编码和街道编码。
使用 EF4.1 和 DBContext,我想编写一个“保存”方法,而不是使用一条街道(以未连接状态进入),检查它是否已存在于数据库中。如果是,则发出 UPDATE,如果不是,则发出 INSERT。
仅供参考,保存这些街道的应用程序正在从文本文件中读取它们并保存它们(该文件中有数万条这样的“街道线”)。
我现在想出的是:
public void Save(Street street)
{
var existingStreet = (
from s in streetContext.Streets
where s.PostalCode.Equals(street.PostalCode)
&& s.StreetCode.Equals(street.StreetCode)
select s
).FirstOrDefault();
if (existingStreet != null)
this.streetContext.Entry(street).State = System.Data.EntityState.Modified;
else
this.streetContext.Entry(street).State = System.Data.EntityState.Added;
this.streetContext.SaveChanges();
}
这是一个好习惯吗?这里的表现如何?因为对于每条街道,它首先都会往返于数据库以查看它是否存在。
尝试插入街道(状态 = 已添加)并捕获任何 PK 违规行为不是更好吗?在 catch 块中,我可以将状态更改为已修改并再次调用 SaveChanges()。或者这不是一个好习惯?
有什么建议吗?
谢谢
【问题讨论】:
标签: c# entity-framework entity-framework-4 primary-key