在我的 WCF 服务的业务逻辑中,大部分需要定位实体的地方,我都使用这种语法:
public void UpdateUser(Guid userId, String notes)
{
using (ProjEntities entities = new ProjEntities())
{
User currUser = entities.SingleOrDefault(us => us.Id == userId);
if (currUser == null)
throw new Exception("User with ID " + userId + " was not found");
}
}
我最近发现DbContext
有Find
方法,我知道我现在可以这样做:
public void UpdateUser(Guid userId, String notes)
{
using (ProjEntities entities = new ProjEntities())
{
User currUser = entities.Find(userId);
if (currUser == null)
throw new Exception("User with ID " + userId + " was not found");
}
}
注意:“userId”属性是表的主键。
我读到,当使用Find
方法实体框架时,首先检查实体是否已经在本地内存中,如果是的话 - 从那里带来它。否则 - 访问数据库(相SingleOrDefault
对于总是访问数据库)。
我想知道我现在是否将所有用途都转换为SingleOrDefault
toFind
是否有任何潜在危险?
Find
如果我使用它从内存而不是数据库中获取数据,是否有可能获得一些尚未更新的旧数据?
如果我在内存中有用户,并且有人更改了数据库中的用户,会发生什么 - 如果我现在总是使用这个“内存”副本而不是总是从数据库中获取最新更新的副本,这会不会有问题?