Entity Framework主從表數(shù)據(jù)加載方式
一、延遲加載:LazyLoading
使用延遲加載,關(guān)聯(lián)的實體必須標(biāo)注為virtual。
本例是標(biāo)注Destination類里的Lodgings為virtual。因為先發(fā)sql去查詢主鍵對象,然后根據(jù)主鍵id去從表里查相關(guān)聯(lián)的數(shù)據(jù)。
private static void TestLazyLoading()
{
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
var canyon = (from d in context.Destinations where d.Name == "Grand Canyon" select d).Single();
var distanceQuery = from l in canyon.Lodgings //延遲加載canyon的所有.Lodgings
where l.Name == "HuangShan Hotel"
select l;
foreach (var lodging in distanceQuery)
Console.WriteLine(lodging.Name);
}
}改進(jìn):在數(shù)據(jù)庫中操作,顯示加載
private static void QueryLodgingDistancePro()
{
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
var canyon = (from d in context.Destinations where d.Name == "Grand Canyon" select d).Single();
var lodgingQuery = context.Entry(canyon).Collection(d => d.Lodgings).Query();//接下來的查詢在數(shù)據(jù)庫中,包括Count()等
var distanceQuery = from l in lodgingQuery
where l.Name == "HuangShan Hotel"
select l;
foreach (var lodging in distanceQuery)
Console.WriteLine(lodging.Name);
}
}二、貪婪加載:EagerLoading
private static void TestEagerLoading()
{
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
// var allDestinations = context.Destinations.Include(d => d.Lodgings);
var AustraliaDestination = context.Destinations.Include(d => d.Lodgings).Where(d => d.Name == "Bali");
//context.Lodgings.Include(l => l.PrimaryContact.Photo);
//context.Destinations.Include(d => d.Lodgings.Select(l => l.PrimaryContact));
//context.Lodgings.Include(l => l.PrimaryContact).Include(l => l.SecondaryContact);
foreach (var destination in AustraliaDestination)
{
foreach (var lodging in destination.Lodgings)
Console.WriteLine(" - " + lodging.Name);
}
}
}三、顯示加載:ExplicitLoading
1、查找導(dǎo)航屬性為一個集合的
private static void LoadRelateData()
{
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
var canyon = (from d in context.Destinations where d.Name == "Grand Canyon" select d).Single();
context.Entry(canyon).Collection(d => d.Lodgings).Load(); //顯示加載
foreach (var lodging in context.Lodgings.Local)
Console.WriteLine(lodging.Name);
}
}2、查找導(dǎo)航屬性為一個實體對象的
private static void LoadPrimaryKeyData()
{
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
var lodging = context.Lodgings.First();
context.Entry(lodging).Reference(l => l.Destination).Load();
foreach (var destination in context.Destinations.Local) //遍歷的是內(nèi)存中的Destinations數(shù)據(jù)
Console.WriteLine(destination.Name);
}
}到此這篇關(guān)于Entity Framework主從表數(shù)據(jù)加載方式的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
WinForm之BindingSource基礎(chǔ)操作實例教程
這篇文章主要介紹了WinForm之BindingSource基礎(chǔ)操作,對BindingSource組建的用法進(jìn)行較為深入的實例分析,需要的朋友可以參考下2014-08-08
C#中加載dll并調(diào)用其函數(shù)的實現(xiàn)方法
下面小編就為大家?guī)硪黄狢#中加載dll并調(diào)用其函數(shù)的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
C# MVC 使用LayUI實現(xiàn)下拉框二級聯(lián)動的功能
這篇文章主要介紹了C# MVC 如何使用LayUI實現(xiàn)下拉框二級聯(lián)動,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06

