微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使Entity Framework对于给定的代码仅调用一次DB?

如何解决如何使Entity Framework对于给定的代码仅调用一次DB?

| 我必须在PatientChartimage表中检查PatientChartimage的存在。如果图像存在,则将其分配给现有对象。我在EF 4.0中使用以下代码
IEnumerable<PatientChartimage> pcimages = from pcImage in context.PatientChartimages
                                        where pcImage.PatientimageID == id
                                        select pcImage;
if (pcimages.Any())
{
   pcimage = pcimages.First();                                        
   isNewImage = false;
}
else
{ 
   isNewImage = true; 
}
sql Profiler显示2个调用 首先是pcimages.Any() 第二个用于pcimages.First() 我如何才能使此代码调用一次DB。     

解决方法

        改用
FirstOrDefault()
:   返回a的第一个元素   序列,如果   序列不包含任何元素。
PatientChartImage pcimage = (from pcImage in context.PatientChartImages
                                  where pcImage.PatientImageID == id
                                  select pcImage).FirstOrDefault();
isNewImage = pcimage!=null;
我个人将在这种情况下使用lambda语法:
PatientChartImage pcimage = context.PatientChartImages
                                   .Where( x => x.PatientImageID == id)
                                   .FirstOrDefault();
    ,        如何做这样的事情:
pcimage = pcimages.FirstOrDefault();
isNewImage = pcimage != null;
如果没有可用的图像或查询序列中的第一个图像,则调用first或default将返回null。这应该只导致一个数据库命中。     ,        
var pcimage = (from pcImage in context.PatientChartImages
                                        where pcImage.PatientImageID == id
                                        select pcImage).FirstOrDefault();

isNewImage = pcimage != null;
    ,        调用pcimages.FirstOrDefault(),然后在进行处理之前检查它是否为null。 像这样的东西
pcimage = pcimages.FirstOrDefault();
if (pcimage != null) {    
   isNewImage = false;
} else {     
   isNewImage = true;  
} 
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。