• 艾伟_转载:数据库设计与Linq增强使用 狼人:


    最近对数据库的设计有些想法,貌似一般数据都有些通用字段

    其中ID是自增长主键(SQL,Oracle环境可以是Sequence生成的ID)

    UpdateTime是最后一次更新时间

    CreateTime是创建时间

    State是数据状态(本来的设想里没有,看了这个文章觉得状态字段实在太需要了。。)

    类型如下:

     

    数据库就这样了。。有什么用呢~?继续看。。

    在这个的基础上,可以抽象出一个 IData 接口:

    IData 接口

    因为数据库的表字段跟IData属性成员是一致的,直接对Linq生成的实体类进行接口签名:

    IData 接口签名

    签名放在

    一般没人用的Linq设计器cs文件里面了。。好处是方便跟着那个大坨的Linq文件走。。

     

    这个文件右键dbml文件 -> 查看代码就出现了,默认是不出现的(因为很惹人讨厌,之前不小心弄出来了我都会把它删掉。。现在用上了。。)

    当然了,上面的借口签名不是一个一个写出来的,直接CodeSmith很简单的就出来了 

    接下来,针对IData进行扩展:

    数据对象扩展

    这样下来每个实体类可以直接增删改:(不知道这样用处大不大。。)

     

    好了,现在我们的Linq实体类可以直接增删改,不用关心Linq的DataContext了,充血充的更厉害了……

    但是查询的时候还是没办法彻底摆脱Linq的DataContext,再来~

    不知道命名,就赶新潮也叫Repository(其实还是DataContext的范畴)

    数据存储池

    这样查询的功能全部被Repository接管了~(实现动态linq的Query方法后,可以直接用字符串查询)

    基本上我们彻底离开DataContext了,用起来大概是这样:

    TestClass

    当然,对Repository还有还有很多事情可以继续做,让它成为一个真正的Repository

    ======

    以上的做法,具体用处大不大还不知道

    不过,不涉及到复杂跨表查询,是可以脱离Linq的DataContext了

    而且使用中处理的实体类都是实现了IData接口的数据对象,辅以扩展方法,代码通用性得到很大提高

    个人觉得还蛮有意义……

  • 相关阅读:
    CSS display:none和visibility:hidden区别
    Eclipse 开发版本选择
    JavaScript 三种弹出框
    jstree的数据后台生成
    C# Enum,Int,String的互相转换 枚举转换
    JS 异常: Uncaught RangeError: Maximum call stack size exceeded
    JS中encodeURI,escape,encodeURIComponent区别
    安卓Android手机系统内文件夹目录解释
    jquery操作select(取值,设置选中)
    单例/单体模式(Singleton)
  • 原文地址:https://www.cnblogs.com/waw/p/2157061.html
Copyright © 2020-2023  润新知