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

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

系統 1968 0
(完全限定類名: DataRabbit.ORM.IEntityRelationLoader

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

現在對我們前面示例經常用到的Student數據表做個擴充,假設,Student表的MentorID字段作為外鍵,指向Mentor表;而且,Book表中的StudentID字段也是外鍵,指向Student表。這種主外鍵關系的含義是:“一個學生有一個導師,并且擁有多本書”。這三個表的關系圖如下所示:
DataRabbit 輕量的數據訪問框架(04) -- IEntityRelationLoader
通過對Student擴充后,我們可以為Student Entity Class 加上如下兩個屬性,來反映這種關系:
#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
我將這種通過主外鍵關系得到的屬性稱為“FamilyRelation”屬性,如果使用 EntityCreator 工具生成Entity Class,這些屬性都會根據數據表關系而自動生成。

現在,我們來調用如下語句:
Studentstudent = stuOrmAccesser.GetOne( new Filter (Student._ID, 30 ));
結果會發現,返回的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表有多個外鍵,則我們就要調用多次GetParent()方法來分別獲取各個Parent;對于多個Children,也是如此。IEntityRelationLoader接口使得這種基于關系的加載變得非常簡單,如上述功能使用下面的代碼即可實現:
entityRelationLoader. LoadFamily (student);
LoadFamily 方法一次調用可以加載當前student對象的所有“Family”成員(注意,這里的加載“Family”只包括加載自己Parent和Children,而不包括更上的grandfather或更下的grandson等)。

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

通過上面的示例,我們對IEntityRelationLoader的功能已經有了一些了解。下面我們來看看這個接口的全貌:
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);
}



轉到: DataRabbit 輕量的數據訪問框架 -- 序


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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 337p欧洲日本大胆艺术 | 男人天堂成人 | 奇米第四色首页 | 99影视在线视频免费观看 | 欧美精品另类 | 日韩免费影视 | 四虎国产精品免费五月天 | 国产日韩在线播放 | 国产一级毛片国产 | 成年女人视频在线观看免费 | 亚洲国产一区二区三区在线观看 | 日本欧美一区二区三区不卡视频 | 免费欧美日韩 | 国产精品400部自产在线观看 | 天天射日| 国产成人短视频 | 97高清国语自产拍免费 | 国产精品视频全国免费观看 | 成人xxx免费视频播放 | 黄色成人在线网站 | 欧美一级人与动毛片免费播放 | 亚洲视频手机在线观看 | 在线观看深夜观看网站免费 | 天天干天天噜 | 国产精品亚洲成在人线 | 国产精品一区视频 | 涩涩色视频在线播放 | 四虎免费视频 | 一区二区三区欧美日韩国产 | 国产一区二区三区精品视频 | 色婷婷久久综合中文网站 | 一本大道香蕉大vr在线吗视频 | 久久精品国产福利国产秒 | 香蕉网伊在线中文慕大全 | 美女啪啪免费网站 | 精品久久久久亚洲 | 奇米四色影视 | 久久黄色免费 | 亚洲日日操| 国产乱子伦 | 久久福利免费视频 |