代码改变世界

关于使用Linq to sql作为数据交互时的架构问题

2010-09-03 15:56  gio.zhou  阅读(356)  评论(0编辑  收藏  举报

刚刚和同事讨论时发现有不小的异议。具体效率哪个高?请各位路过的高手指教下。

 

我的方案:

  Data层:

    父类:

public abstract class LinqDataBase 
    {
        public static InfoCollectDBDataContext InfoCollectDBDataContextObj = new InfoCollectDBDataContext("Initial Catalog=InfoCollectDB; data source=VSH-ZHOUJIE02;user id=sa;password=123456;");
    }

 

    子类:

 

 public class PermissionDA : LinqDataBase
    {
        public static int GetPermissionID(string uid)
        {
            var ic_User = InfoCollectDBDataContextObj.Ic_Users.SingleOrDefault(a => a.uid == uid);
            InfoCollectDBDataContextObj.Refresh(RefreshMode.OverwriteCurrentValues, ic_User);
            return ic_User.permission_id;
        }
    }

 

Bussiness层调用

 


    public class ActivityBussiness    { public static int GetInfoDataList(string uid) { return PermissionDA.GetPermissionID(uid); }
}

 

 

 

我个人觉得,缺点是

  1. 是每个方法中我都需要写Refresh
  2. 每次Refresh时都需要将内存中的数据对象覆盖InfoCollectDBDataContextObj对应的数据。

同事的方案:
  数据层:

 

public class PermissionDA : LinqDataBase
    {
        public int GetPermissionID(string uid)
        {
InfoCollectDBDataContext InfoCollectDBDataContextObj = new InfoCollectDBDataContext();
            var ic_User = InfoCollectDBDataContextObj.Ic_Users.SingleOrDefault(a => a.uid == uid);
            return ic_User.permission_id;
        }
    }

 

 

  业务层:

 

public class ActivityBussiness    {
        public int GetInfoDataList(string uid)
        {
PermissionDA o = new PermissionDA();
            return o.GetPermissionID(uid);
        }
}

 

 

 

2个区别就是一个是使用静态方法,导致DataContext也是静态对象,所以每次要refresh。但是我实在不想实例化这种只是方法,而不包含业务数据的类。

同事的方案。不需要使用refresh。但是需要每次DISPOSE。 

 

具体的区别。还有很多很多。熟优熟劣请大家帮我分析下。