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

DataRabbit 輕量的數據訪問框架(03) -- IOr

系統 1945 0

本文將接著 DataRabbit 輕量的數據訪問框架 -- IOrmAccesser 繼續介紹IOrmAccesser的一些高級功能。這些高級功能需要DataRabbit.ORM.ISmartEntity接口的支持。注意,對于Entity class 來說,該接口并不是強制的。

(1)關于含自增字段的Entity插入

插入后,Entity中對應自增字段的屬性將被正確地賦為數據庫中自增結果值。


如果Entity class 繼承了ISmartEntity接口,那么這個Entity就是一個“Smart”的Entity,IOrmAccesser針對這樣的Entity,它將擁有兩種特殊的能力:
(2)partial update :即部分更新的功能。即在Update一個SmartEntity對象時,只更新哪些標記為“dirty”的字段。
比如,我們以前這樣來實現“將ID為30的學生的Email更新”的功能:

// 將ID為30的學生的Email更新
Student student = stuOrmAccesser. GetOne ( new Filter(Student._ID, 30 ));
student.Email
= " sky@299.com " ;
stuOrmAccesser.Update(student);// 更新除主鍵外的所有字段

但是,如果Student Entity實現了ISmartEntity接口,就可以這么做:
// 將ID為30的學生的Email更新
Student student = new Student () ;
student.ID = 30 ;
student.Email
= " sky@299.com " ;
stuOrmAccesser.Update(student);//僅僅 更新“Email”字段

由于指講“Email”字段標記為“dirty”,所以在Update時,僅僅會更新“Email”字段的值。

(3)插入前檢查: 即在向數據庫中插入一個SmartEntity對象之前,先檢查該對象的狀態是否正確,如果不正確,將不會插入,而是拋出InvalidEntityException異常。

ISmartEntity接口定義與說明如下:
public interface ISmartEntity
{
/// <summary>
/// Clean將所有Column字段的dirty標記設為false。
/// </summary>
void Clean();

/// <summary>
/// DirtyColumnList獲取所有需要更新的Column
/// </summary>
IList < string > DirtyColumnList{ get ;}

/// <summary>
/// Check用于檢查Entity內部狀態是否一致。
/// 在將ISmartEntity插入(或更新)到數據庫之前,DataRabbit會檢查(Check)其狀態是否有效,如果無效,則將拋出InvalidEntityException。
/// </summary>
bool Check(DataAccessTypedataAccessType);
}

/// <summary>
/// DataAccessType訪問數據庫的幾種操作類型
/// </summary>
public enum DataAccessType
{
Query,Insert,Update,Delete
}

普通的Entity class可以通過工具自動生成,smart Entity class也可以通過工具自動生成,我寫了一個簡單的小工具“ EntityCreator ”來生成Entity class或smart Entity class。生成的Entity class代碼中,Check()方法直接返回true,我們可以在這個方法內添加代碼以檢查當前Entity對象的狀態,確保在插入該對象之前,對象的狀態是一致、正確的。
下面是針對前述的Student生成的smart Entity 代碼:
Student
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> [Serializable]
public partial class Student:ISmartEntity
{

#region ForceStaticCheck
public const string TableName = " Student " ;
public const string _ID = " ID " ;
public const string _Name = " Name " ;
public const string _Age = " Age " ;
public const string _MentorID = " MentorID " ;
public const string _Email = " Email " ;
public const string _IsBoy = " IsBoy " ;
#endregion

#region Property

#region ID
private System.Int32m_ID = 0 ;
public System.Int32ID
{
get
{
return this .m_ID;
}
set
{
if ( ! this .dirtyColumnList.Contains( " ID " ))
{
this .dirtyColumnList.Add( " ID " );
}
this .m_ID = value;
}
}
#endregion

#region Name
private System.Stringm_Name = "" ;
public System.StringName
{
get
{
return this .m_Name;
}
set
{
if ( ! this .dirtyColumnList.Contains( " Name " ))
{
this .dirtyColumnList.Add( " Name " );
}
this .m_Name = value;
}
}
#endregion

#region Age
private System.Int32m_Age = 0 ;
public System.Int32Age
{
get
{
return this .m_Age;
}
set
{
if ( ! this .dirtyColumnList.Contains( " Age " ))
{
this .dirtyColumnList.Add( " Age " );
}
this .m_Age = value;
}
}
#endregion

#region MentorID
private System.Int32m_MentorID = 0 ;
public System.Int32MentorID
{
get
{
return this .m_MentorID;
}
set
{
if ( ! this .dirtyColumnList.Contains( " MentorID " ))
{
this .dirtyColumnList.Add( " MentorID " );
}
this .m_MentorID = value;
}
}
#endregion

#region Email
private System.Stringm_Email = "" ;
public System.StringEmail
{
get
{
return this .m_Email;
}
set
{
if ( ! this .dirtyColumnList.Contains( " Email " ))
{
this .dirtyColumnList.Add( " Email " );
}
this .m_Email = value;
}
}
#endregion

#region IsBoy
private System.Booleanm_IsBoy = false ;
public System.BooleanIsBoy
{
get
{
return this .m_IsBoy;
}
set
{
if ( ! this .dirtyColumnList.Contains( " IsBoy " ))
{
this .dirtyColumnList.Add( " IsBoy " );
}
this .m_IsBoy = value;
}
}
#endregion
#endregion

#region ISmartEntitymembers

#region DirtyColumnList
[NonSerialized]
private IList < string > dirtyColumnList = new List < string > ();
public IList < string > DirtyColumnList
{
get { return dirtyColumnList;}
}
#endregion

#region Clean
public void Clean()
{
this .dirtyColumnList.Clear();
}
#endregion

#region Check
public bool Check(DataAccessTypedataAccessType)
{
// 可在此添加自己的Entity狀態驗證邏輯
return true ;
}
#endregion
#endregion

#region ToString
public override string ToString()
{
return this .ID.ToString() + " " + this .Name.ToString();
}
#endregion
}


最后,提供 EntityCreator 小工具的下載。


返回到: 輕量的數據訪問框架 --序


DataRabbit 輕量的數據訪問框架(03) -- IOrmAccesser(續)


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品日产1区2区 | 亚洲国产系列一区二区三区 | 97视频免费上传播放 | 天天躁日日躁成人字幕aⅴ 天天躁日日躁狠狠躁黑人躁 | 一级特级欧美aaaaa毛片 | 夜夜狠狠狠狠 | 欧美大片aaaa一级毛片 | 伊人影院视频 | 影视先锋av资源噜噜 | 国产精品高清久久久久久久 | 欧美一区二区三区影院 | 国产日产精品_国产精品毛片 | 亚洲欧洲日产国码久在线观看 | 欧美综合天天夜夜久久 | 亚洲福利视频精选在线视频 | 久青草免费视频手机在线观看 | 四虎永久免费在线 | 午夜999 | 大ji吧快给我别停受不了视频 | 国产精品免费播放 | 久久精品国产99久久72 | 日韩国产一区二区 | 欧美天天爽 | 亚洲国产精品久久 | 天天干天天操天天舔 | 国产福利区一区二在线观看 | 日日噜噜夜夜狠狠tv视频免费 | 素人巨乳被调教 | 国产一区91| 日本免费视屏 | 真正全免费视频a毛片 | 最近手机中文字幕1页 | 欧美日韩国产三级 | 九九香蕉视频 | 亚洲成人免费网站 | 日韩欧美国产一区二区三区 | 天天色天天操综合网 | 91资源视频| 久久爱综合久久爱com | 亚洲黄页 | 性色视频|