亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

DataRabbit 輕量的數(shù)據(jù)訪問框架(04) -- IEn

系統(tǒng) 2341 0
(完全限定類名: DataRabbit.ORM.IEntityRelationLoader

在DataRabbit框架提供的ORM功能之中,除了IOrmAccesser接口展現(xiàn)的核心ORM功能外,IEntityRelationLoader接口也提供了一些有意義的功能。正如其名,IEntityRelationLoader是通過數(shù)據(jù)表的主外鍵關(guān)系來加載當前Entity的Parent和Children。

現(xiàn)在對我們前面示例經(jīng)常用到的Student數(shù)據(jù)表做個擴充,假設(shè),Student表的MentorID字段作為外鍵,指向Mentor表;而且,Book表中的StudentID字段也是外鍵,指向Student表。這種主外鍵關(guān)系的含義是:“一個學生有一個導師,并且擁有多本書”。這三個表的關(guān)系圖如下所示:
DataRabbit 輕量的數(shù)據(jù)訪問框架(04) -- IEntityRelationLoader
通過對Student擴充后,我們可以為Student Entity Class 加上如下兩個屬性,來反映這種關(guān)系:
#region Mentor
[ NonSerialized ]
private Mentor m_Mentor = null ;
public Mentor Mentor
{
get
{
return this .m_Mentor;
}
set
{
this .m_Mentor = value;
}
}
#endregion

#region BookList
[ NonSerialized ]
private IList < Book > m_BookList = null ;
public IList < Book > BookList
{
get
{
return this .m_BookList;
}
set
{
this .m_BookList = value;
}
}
#endregion
我將這種通過主外鍵關(guān)系得到的屬性稱為“FamilyRelation”屬性,如果使用 EntityCreator 工具生成Entity Class,這些屬性都會根據(jù)數(shù)據(jù)表關(guān)系而自動生成。

現(xiàn)在,我們來調(diào)用如下語句:
Studentstudent = stuOrmAccesser.GetOne( new Filter (Student._ID, 30 ));
結(jié)果會發(fā)現(xiàn),返回的student對象的Mentor屬性和BookList屬性不會被填充。如果不使用IEntityRelationLoader接口,而是直接通過IOrmAccesser來獲取這個student的“Family”,我們需要這樣做:
Student student = stuOrmAccesser.GetOne( new Filter (Student._ID, 30 ));
student.Mentor
= stuOrmAccesser.GetParent < Mentor > (student);
student.BookList
= stuOrmAccesser.GetChildList < Book > (student);
像這樣子可以達到目的,但是未免繁瑣了一點,如果Student表有多個外鍵,則我們就要調(diào)用多次GetParent()方法來分別獲取各個Parent;對于多個Children,也是如此。IEntityRelationLoader接口使得這種基于關(guān)系的加載變得非常簡單,如上述功能使用下面的代碼即可實現(xiàn):
entityRelationLoader. LoadFamily (student);
LoadFamily 方法一次調(diào)用可以加載當前student對象的所有“Family”成員(注意,這里的加載“Family”只包括加載自己Parent和Children,而不包括更上的grandfather或更下的grandson等)。

我們可以從DataRabbit的入口點 IDataAccesser 接口獲取IEntityRelationLoader引用:
IEntityRelationLoader entityRelationLoader = dataAccesser.GetEntityRelationLoader( null );

通過上面的示例,我們對IEntityRelationLoader的功能已經(jīng)有了一些了解。下面我們來看看這個接口的全貌:
public interface IEntityRelationLoader : ITransactionAccesser
{
/// <summary>
/// LoadChildren加載自己的children到對應的屬性字段(如果Entity提供了這些屬性字段,并且屬性可寫)上。
/// </summary>
void LoadChildren( object entity);

/// <summary>
/// LoadParents加載自己的parents到對應的屬性字段(如果Entity提供了這些屬性字段,并且屬性可寫)上。
/// </summary>
void LoadParents( object entity);

/// <summary>
/// LoadFamily加載自己的parents和children到對應的屬性字段(如果Entity提供了這些屬性字段,并且屬性可寫)上。
/// </summary>
void LoadFamily( object entity);

/// <summary>
/// LoadOffspring以當前entity為根,加載所有后代。注意,自己以及后代的所有Parent屬性都不會被賦值。
/// </summary>
void LoadOffspring( object entity);
}



轉(zhuǎn)到: DataRabbit 輕量的數(shù)據(jù)訪問框架 -- 序


DataRabbit 輕量的數(shù)據(jù)訪問框架(04) -- IEntityRelationLoader


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 97影院在线观看 | 久久欧美| 亚洲成人免费网站 | 亚洲欧美综合另类 | 亚洲图片综合区 | 最新国产精品亚洲二区 | 欧美亚洲国产另类 | 久久久久久久国产高清 | 日本a级精品一区二区三区 日本a毛片在线播放 | 欧美一级久久久久久久大 | 五月天婷婷在线视频国产在线 | 日韩一级不卡 | 六月婷婷久香在线视频 | 国产夫妻久久线观看 | 国产精品二| 欧美日本视频在线观看 | 久久国产精品高清一区二区三区 | 成人香蕉网 | 欧美洲大黑香蕉在线视频 | 成人亚洲国产精品久久 | 福利午夜国产网站在线不卡 | 99精品视频在线免费观看 | 四虎在线播放免费永久视频 | 国产精品视频公开费视频 | 久久国产亚洲高清观看5388 | 欧美日韩精品一区三区 | jizjizjiz亚洲人 | 亚洲欧美中文日韩二区一区 | 国产高清国产专区国产精品 | 亚洲欧美日韩中文高清一 | 九九精品在线观看 | 中午字幕在线观看 | a级免费网站 | 欧美成人免费观看久久 | 深夜看片在线观看18 | 91中文字幕视频 | 日本中文字幕永久在线 | 亚洲视频 欧美视频 | 久久亚洲国产精品 | 欧美一区二区在线免费观看 | 伊人成影院九九 |