LINQ创建db manager类的最佳实践是什么?

时间:2011-10-08 09:28:45

标签: c# linq datacontext

最佳性能和一致性是什么?

变体1(继承自DataContext):

public class MyDbManager : DataContext
{
    public MyDbManager(string conn):base(conn)
    {
        var tblMyTable1 = GetTable<MyTable1>();
        var tblMyTable2 = GetTable<MyTable2>();
    }
    public void GetEntityById(int id)
    {
        var myEntity = (from p in tblMyTable1 where p.Id == id  select p).FirstOrDefault();
    }
}

变体2(每次新建连接时创建)

    public class MyDbManager
    {
        public string ConnectionString = "myConnStr";

        public List<Program> GetAllPrograms ()
        {
            var programs = new List<Program>();
            using (var db = new DataContext(ConnectionString))
            {
                var tblPrograms = db.GetTable<Program>();
                programs = (from p in tblPrograms select p).FirstOrDefault( .ToList());
            }
            return programs;
        }
}

或许您有第三种变体?非常感谢你!

1 个答案:

答案 0 :(得分:2)

为了保持一致性,我会采用Repository Pattern,为了表现,我会采用Unit of Work模式。

使用第二种方法,您似乎有点沿着该路线走下去,但是,我会在我的数据库中为每个实体创建一个存储库,例如Table1Repository / Table2Repository,并将每个实体的所有责任委托给相应的repo ....只是我的意见。

如果你看一下你的第一种方法,你实际上并没有正确地在本地缓存表,但我明白你的目标是什么。所以,如果你考虑一下,虽然一旦你的系统启动它可能会更快。运行是否真的有效(或必要)从表中缓存每个记录?在大多数情况下,您会查询Customer->Orders之类的内容,因此,如果&amp;和查询数据库肯定会更有意义。什么时候需要?因为您的行程不仅会缩短,而且服务器上的密集程度也会降低。

DataContext是轻量级的,并且在设计时考虑了这种方法。