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

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

系統 2284 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條評論
主站蜘蛛池模板: 精品亚洲视频在线观看 | 国产精品成人观看视频免费 | 国产美女久久久久久久久久久 | 色综合狠狠操 | 欧美区一区二区三 | 国产一区二区三区四区在线 | 国产日韩欧美一区二区三区综合 | 欧美午夜网 | 99久久国产综合精品女小说 | 色爱区综合激情五月综合激情 | 亚洲国产精品婷婷久久久久 | 我要看免费的毛片 | 黄色色片| 天天摸天天草 | 天天射天天干天天操 | 国产一区二区在线看 | 欧美人成在线 | 欧美日韩在线播放一区二区三区 | 亚洲狠狠婷婷综合久久久图片 | 欧美日韩亚洲综合久久久 | 91极品视频在线观看 | 亚洲欧美在线观看一区二区 | 久久成人亚洲香蕉草草 | 综合在线亚洲 | 夜色成人免费观看 | 美美女高清毛片视频黄的一免费 | 亚洲国产欧美精品一区二区三区 | 国产成人99久久亚洲综合精品 | 男女拍拍视频黄的全免费 | 美女视频免费在线观看 | 狠狠干夜夜草 | 一区二区免费看 | 成人久久伊人精品伊人 | 国产成人一区二区三区影院免费 | 成 人 免 费 黄 色 | 最新av| 免费观看久久 | 久青草免费在线视频 | 国产一区二区三区乱码网站 | 操操网站 | 色综和|