Entity Framework (EF) 是一个用于 .NET 开发的 ORM 框架,其更大的优势之一是具有极其灵活的查询和数据操作能力。但是,有时候我们需要强制从数据库中获取一个数据而不使用缓存。这在 EF 中应该如何实现呢?
网站的建设成都创新互联公司专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为成都石雕等企业提供专业服务。
现在,我们假设有一个简单的示例,其中包含两个实体类:Customer 和 Order。Customer 包含一个订单 OrderList:
“`csharp
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection OrderList { get; set; }
}
public class Order
{
public int Id { get; set; }
public DateTime OrderDate { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}
“`
在这个示例中,我们有一个指向 Customer 实体的导航属性,称为 OrderList。
如果我们以以下方式获取 OrderList,即通过 Customer 实例调用这个属性:
“`csharp
var customer = dbContext.Customers.FirstOrDefault(c => c.Id == 1);
var orders = customer.OrderList;
“`
EF 默认会从数据库中加载 Customer,并在之一次访问其 OrderList 属性时对其进行延迟加载。
但是,该缓存可能会导致问题。例如,在一个线程中修改了一个订单,而在另一个线程中却查看了相同客户的订单列表,此时你可能会看到旧数据而不是更新后的内容。为了避免此类问题,可以通过以下方式强制从数据库中获取数据:
“`csharp
var customer = dbContext.Customers
.Include(c => c.OrderList)
.AsNoTracking()
.FirstOrDefault(c => c.Id == 1);
var orders = customer.OrderList.ToList();
“`
此处使用的 AsNoTracking() 方法告诉 EF 不要跟踪这个对象。而 Include() 方法指示 EF 装载 OrderList 属性的数据。通过调用 ToList(),我们可以确保此时 EF 将从数据库中获取 OrderList 而不是从缓存中获取它。
如果想要避免出现 bug,或者出于其他安全或性能考虑,我们强烈建议您在类似上述代码的 EF 查询中使用该方法。
相关问题拓展阅读:
我的采用的漏贺是javabena+jsp
一个javabean
public ArrayList selectCourseInfo()throws Exception {//下拉框显察神示课程信息
ArrayList list = new ArrayList();
try {
db.open();
ResultSet rs = db.select(“select * from CourseInfo”);
while (rs.next()) {
list.add(new CourseInfo(rs.getInt(1), rs.getString(2),rs.getString(3)));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
db.close();
}
return list;
}
然后在jsp中调用
课 程:
这样就可以动态的显示了
jsp中把数据库全量查询后填充select列表:
举例说明:
入学批次: //选择入学批次会刷新层次和专业
请选择–
${gradeInfo.gradeName}
统考课程:
请选择侍唤氏–
${uniExamCourse.uniExamCourseName}
//设置ID,用于填充层次链中和专业的下拉框
层次: //选择层次后刷新专业
请选择–
${educationLevel.educationLevelName}
专业:
请选择–
老散${special.specialName}
java后台通过dao接口获取specialList的值,并且保存到session即可。
jsp中把数据库全量查询后填充select列表:
举例说明:
入学批次:
//选择入学批次会刷新层次和专业
–请选择–
${gradeInfo.gradeName}
统考课程:
–请选择–
${uniExamCourse.uniExamCourseName}
//设置ID,用于填充层次和专业的下拉框
层
次:
//选择层次后刷新专业
–请选择–
${educationLevel.educationLevelName}
专
业:
–请选择–
${special.specialName}
java后台通过dao接口获取specialList的值,并且保存到session即可。
用struts,
或者ajax,
再或者你用js吧。
普通的循环应该也可以。
但你的要求我感觉滚绝struts标签是更好的.
========================================
你或胡的数据是一个javabean的list(大团姿)吗?
我的采用的是javabena+jsp
一个javabean
public
ArrayList
selectCourseInfo()throws
Exception
{//下拉框显示课程信息
ArrayList
list
=
new
ArrayList();
try
{
db.open();
ResultSet
rs
=
db.select(“select
*
from
CourseInfo”);
while
(rs.next())
{
list.add(new
CourseInfo(rs.getInt(1),
rs.getString(2),rs.getString(3)));
}
}
catch
(Exception
e)
{
e.printStackTrace();
}
finally
{
db.close();
}
return
list;
}
然后在jsp中调用
课
程:
这样就可以动态的显示了
看你的意思是大量的、基础的数据,那应该是经常用到的,且变盯扰化不大的数据。这些数据还是放在内存中比较好,访问起来快而且拍烂不需要经常连数据库袭则漏。
关于ef 强制从数据库获取的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
成都创新互联科技有限公司,是一家专注于互联网、IDC服务、应用软件开发、网站建设推广的公司,为客户提供互联网基础服务!
创新互联(www.cdcxhl.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。创新互联——四川成都IDC机房服务器托管/机柜租用。为您精选优质idc数据中心机房租用、服务器托管、机柜租赁、大带宽租用,高电服务器托管,算力服务器租用,可选线路电信、移动、联通机房等。
网站栏目:EFORM技巧:强制从数据库获取数据(ef强制从数据库获取)
当前地址:http://www.shufengxianlan.com/qtweb/news17/133567.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联