實例產品基於asp.net mvc 5.0框架,源碼下載地址:http://www.jinhusns.com/Products/Download 在設計時,如果能夠預測到一些實體可能在後續的研發(或二次開發)中增加一些屬性,為了能夠快速增、減這類屬性,提供了可序列化屬性的設計機制。可序列化屬性具有以 ...
實例產品基於asp.net mvc 5.0框架,源碼下載地址:http://www.jinhusns.com/Products/Download
在設計時,如果能夠預測到一些實體可能在後續的研發(或二次開發)中增加一些屬性,為了能夠快速增、減這類屬性,提供了可序列化屬性的設計機制。可序列化屬性具有以下特點:
優點:
一個實體的可序列化屬性統一序列化後存儲到資料庫,因此增、減可序列化屬性無需變更資料庫設計;
缺點:
僅支持簡單的數據類型,例如:string、bool、int、datetime等;
由於可序列化屬性統一序列化後存儲到資料庫,因此不能通過sql語句使用可序列化屬性作為查詢條件或排序條件。
在實體對應的資料庫表添加:PropertyNames、PropertyValues兩個欄位(設置為可空欄位);
使用方法:
1、從SerializablePropertiesBase派生自己的實體類,並加Serializable標註;
2、可序列化屬性,由於無需對應資料庫表的存儲,因此必須添加[Ignore](orm標註,防止映射),調用時和普通屬性一樣;
SerializablePropertiesBase是我們可序列化屬性的基類,裡面對我們序列化進行處理。
實現原理:
PropertyNames =EnableRatings:S:0:4:EnableTrackBacks:S:4:4:CommentModerationType:S:8:4:
PropertyValues=TrueTrueNone
“S:0:4"表示在PropertyValues欄位中的字元從位置0開始長度為4位的子字元串屬於“EnableRatings"的屬性值,同理:"S:4:4"表示,從位置4開始,長度為4位的子字元串屬於“EnableTrackBacks”的屬性值,依次類推可以獲得PropertyNames所有的欄位的值。(其中S代表存儲格式是字元串,由於目前全部以字元串存儲所以不需特別關註)。因此可以解析出屬性EnableRatings對應的值True。