新聞中心
Entity Framework (EF) 是一個(gè)用于 .NET 開(kāi)發(fā)的 ORM 框架,其更大的優(yōu)勢(shì)之一是具有極其靈活的查詢和數(shù)據(jù)操作能力。但是,有時(shí)候我們需要強(qiáng)制從數(shù)據(jù)庫(kù)中獲取一個(gè)數(shù)據(jù)而不使用緩存。這在 EF 中應(yīng)該如何實(shí)現(xiàn)呢?

網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為成都石雕等企業(yè)提供專業(yè)服務(wù)。
現(xiàn)在,我們假設(shè)有一個(gè)簡(jiǎn)單的示例,其中包含兩個(gè)實(shí)體類:Customer 和 Order。Customer 包含一個(gè)訂單 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; }
}
“`
在這個(gè)示例中,我們有一個(gè)指向 Customer 實(shí)體的導(dǎo)航屬性,稱為 OrderList。
如果我們以以下方式獲取 OrderList,即通過(guò) Customer 實(shí)例調(diào)用這個(gè)屬性:
“`csharp
var customer = dbContext.Customers.FirstOrDefault(c => c.Id == 1);
var orders = customer.OrderList;
“`
EF 默認(rèn)會(huì)從數(shù)據(jù)庫(kù)中加載 Customer,并在之一次訪問(wèn)其 OrderList 屬性時(shí)對(duì)其進(jìn)行延遲加載。
但是,該緩存可能會(huì)導(dǎo)致問(wèn)題。例如,在一個(gè)線程中修改了一個(gè)訂單,而在另一個(gè)線程中卻查看了相同客戶的訂單列表,此時(shí)你可能會(huì)看到舊數(shù)據(jù)而不是更新后的內(nèi)容。為了避免此類問(wèn)題,可以通過(guò)以下方式強(qiáng)制從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù):
“`csharp
var customer = dbContext.Customers
.Include(c => c.OrderList)
.AsNoTracking()
.FirstOrDefault(c => c.Id == 1);
var orders = customer.OrderList.ToList();
“`
此處使用的 AsNoTracking() 方法告訴 EF 不要跟蹤這個(gè)對(duì)象。而 Include() 方法指示 EF 裝載 OrderList 屬性的數(shù)據(jù)。通過(guò)調(diào)用 ToList(),我們可以確保此時(shí) EF 將從數(shù)據(jù)庫(kù)中獲取 OrderList 而不是從緩存中獲取它。
如果想要避免出現(xiàn) bug,或者出于其他安全或性能考慮,我們強(qiáng)烈建議您在類似上述代碼的 EF 查詢中使用該方法。
相關(guān)問(wèn)題拓展閱讀:
- jsp中下拉框中的值從數(shù)據(jù)庫(kù)中動(dòng)態(tài)獲取
- ef查詢是在內(nèi)存中過(guò)濾還是從數(shù)據(jù)庫(kù)過(guò)濾
jsp中下拉框中的值從數(shù)據(jù)庫(kù)中動(dòng)態(tài)獲取
我的采用的漏賀是javabena+jsp
一個(gè)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中調(diào)用
課 程:
這樣就可以動(dòng)態(tài)的顯示了
jsp中把數(shù)據(jù)庫(kù)全量查詢后填充select列表:
舉例說(shuō)明:
入學(xué)批次: //選擇入學(xué)批次會(huì)刷新層次和專業(yè)
請(qǐng)選擇–
${gradeInfo.gradeName}
統(tǒng)考課程:
請(qǐng)選擇侍喚氏–
${uniExamCourse.uniExamCourseName}
//設(shè)置ID,用于填充層次鏈中和專業(yè)的下拉框
層次: //選擇層次后刷新專業(yè)
請(qǐng)選擇–
${educationLevel.educationLevelName}
專業(yè):
請(qǐng)選擇–
老散${special.specialName}
java后臺(tái)通過(guò)dao接口獲取specialList的值,并且保存到session即可。
jsp中把數(shù)據(jù)庫(kù)全量查詢后填充select列表:
舉例說(shuō)明:
入學(xué)批次:
//選擇入學(xué)批次會(huì)刷新層次和專業(yè)
–請(qǐng)選擇–
${gradeInfo.gradeName}
統(tǒng)考課程:
–請(qǐng)選擇–
${uniExamCourse.uniExamCourseName}
//設(shè)置ID,用于填充層次和專業(yè)的下拉框
層
次:
//選擇層次后刷新專業(yè)
–請(qǐng)選擇–
${educationLevel.educationLevelName}
專
業(yè):
–請(qǐng)選擇–
${special.specialName}
java后臺(tái)通過(guò)dao接口獲取specialList的值,并且保存到session即可。
用struts,
或者ajax,
再或者你用js吧。
普通的循環(huán)應(yīng)該也可以。
但你的要求我感覺(jué)滾絕struts標(biāo)簽是更好的.
========================================
你或胡的數(shù)據(jù)是一個(gè)javabean的list(大團(tuán)姿)嗎?
我的采用的是javabena+jsp
一個(gè)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中調(diào)用
課
程:
這樣就可以動(dòng)態(tài)的顯示了
ef查詢是在內(nèi)存中過(guò)濾還是從數(shù)據(jù)庫(kù)過(guò)濾
看你的意思是大量的、基礎(chǔ)的數(shù)據(jù),那應(yīng)該是經(jīng)常用到的,且變盯擾化不大的數(shù)據(jù)。這些數(shù)據(jù)還是放在內(nèi)存中比較好,訪問(wèn)起來(lái)快而且拍爛不需要經(jīng)常連數(shù)據(jù)庫(kù)襲則漏。
關(guān)于ef 強(qiáng)制從數(shù)據(jù)庫(kù)獲取的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開(kāi)發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡(jiǎn)單好用,價(jià)格厚道的香港/美國(guó)云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)——四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,高電服務(wù)器托管,算力服務(wù)器租用,可選線路電信、移動(dòng)、聯(lián)通機(jī)房等。
當(dāng)前文章:EFORM技巧:強(qiáng)制從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)(ef強(qiáng)制從數(shù)據(jù)庫(kù)獲取)
網(wǎng)站地址:http://m.5511xx.com/article/cdgeocj.html


咨詢
建站咨詢
