场景, 网站用户的个性化配置较多, 而且容易发生增加和改变, 如何在数据库保存是个问题.

为了避免数据库表字段经常变更, 我们设计在表增加一个varbinary(max)字段存储个性化配置.

个性化的配置则存储到dictionary<string,string>中. 然后序列化成bytes即可.

见代码

先来一个帮助类

///
/// 持久个性化设置的类
///
public class ModelSetting
{ private Dictionary _hash;
public ModelSetting() {
_hash = new Dictionary();
} ///
/// 把数据库中的bytes转化成可用的dictionary
///
///
public void Load(byte[] bytes)
{
using (MemoryStream ms1 = new MemoryStream(bytes)) {
BinaryFormatter bf = new BinaryFormatter();
_hash = (Dictionary)bf.Deserialize(ms1);
}
}
///
/// 把实体中的dictionary转成bytes
///
///
public byte[] ToByteArray()
{
using (MemoryStream ms1 = new MemoryStream())
{
BinaryFormatter b = new BinaryFormatter();
b.Serialize(ms1, _hash);
return ms1.ToArray();
}
} public ICollection Keys
{
get
{
return _hash.Keys;
}
} public string Get(string Name, string Def){
if (_hash.ContainsKey(Name))
return _hash[Name];
else
return Def;
}
public void Set(string Name, string Val)
{
if (Val == null)
Val = "";
_hash[Name] = Val;
}
}

然后在domain中的模型中增加如下代码

///
/// Setting设置帮助类
///
protected ModelSetting modelsetting = new ModelSetting();
private Dictionary _allSettings = new Dictionary();
private bool _isLoaded = false;
///
/// 通过这个访问个性化设置
///
public Dictionary AllSettings
{
get {
if (!_isLoaded)
LoadSettings();
return _allSettings;
}
} ///
/// 将二进制的内容加载成具体的对象
///
private void LoadSettings()
{
if (Settings != null && Settings.Length > 1)
{
modelsetting.Load(Settings); _allSettings.Clear();
foreach (string key in modelsetting.Keys)
{
_allSettings.Add(key, modelsetting.Get(key, string.Empty));
} _isLoaded = true;
}
}
///
/// 将单一的某个设置的键值对,存入网站本身二进制的Setting里.
/// 本方法只是临时将键值对,放入字典。真正更新数据库,还需要SaveSetting()再Update(YibuSite)
///
///
///
public void SetOneSetting(string key, string value)
{
if (AllSettings.ContainsKey(key))
{
AllSettings[key] = value;
}
else
{
AllSettings.Add(key, value);
}
}
public void SaveSetting()
{
foreach (string key in _allSettings.Keys)
{
modelsetting.Set(key, _allSettings[key]);
}
Settings = modelsetting.ToByteArray();
}

存储和取值

public ActionResult TestModelSetting() {
var temp = _userservice.Table.First();
temp.SetOneSetting("xiaomi", "jianjialin");
temp.SetOneSetting("mobile","13900000000");
temp.SaveSetting();
_userservice.Update(temp); var temp2 = _userservice.Table.First();
return Content(temp2.AllSettings["xiaomi"]);
}

最新文章

  1. 基于Caffe的DeepID2实现(上)
  2. 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
  3. Debian/Ubuntu server上安装安全更新
  4. win10 设置 计算机/此电脑/我的电脑 图标到桌面上
  5. informatica 学习日记整理
  6. [hackerrank]Closest Number
  7. (转载)linux那点事儿(中)
  8. Smarty 插件开发
  9. SignalR1
  10. ring3 hook ZwWriteVirtualMemory
  11. 内嵌的Component调用外部的方法
  12. 深入分析Android动画(一)
  13. iOS视频边下载边播放
  14. gdb 脚本调试
  15. Pass的通用指令开关
  16. tf变换(1)
  17. Java多线程详解(三)
  18. linux 学习第十一天
  19. 聊聊flink Table的groupBy操作
  20. 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

热门文章

  1. xamarin.android 图片高斯模糊效果
  2. Quicksum-S.B.S.
  3. runc的detach, console, tty等相关问题
  4. java使用HttpClient传输json格式的参数
  5. 莫比乌斯反演 BZOJ 2820
  6. UVA-10828 (概率期望+高斯消元)
  7. 第12章 纤程(Fiber)
  8. 贴图在Unity中的设置
  9. 转: Red Hat/Fedora Linux 上使用 yum 安装 python pip 模块
  10. 024医疗项目-模块二:药品目录的导入导出-HSSF导入类的学习