不多说目前我仅仅实现了SqlServer2012的部分
发下增删改查和事务的代码吧
ISession session = new Session(DBString);
            //查询并且分页
            Source s = session.Select(typeof(Source).Name).Skip(1, 1, Source.IDProty).ExecuteDataTable<Source>().First();
            //删除
            session.Delete(typeof(Source).Name).AddWhere(Source.IDProty, s.ID, WhereEnum.等于);
            s.Title = "10000000000";
            //修改
            session.Update(typeof(Source).Name, s);
            //添加
            ISession sessions = new Session(DBString);
            sessions.Insert(typeof(Source).Name, s);
            ITransaction transactio = new Transaction();
            //删除和添加操作放到了一起做事务
            transactio.SetOperation(session);
            transactio.SetOperation(sessions);
            //事务
            System.Console.WriteLine(transactio.Execute().ToString());
            System.Console.WriteLine("Over");
            System.Console.ReadLine();
下载地址http://pan.baidu.com/share/link?shareid=316925710&uk=218914862

解决方案 »

  1.   

    确实挺烂,我说的烂不是说你代码写的烂,而是你这个东西的使用方式真烂。第一,使用的使用需要使用者通过反射来提供参数,烂!
    第二,语法不明确,既不是SQL形式,也不是LINQ形式,写这些东西和看这些操作的人会十分痛苦,烂!
      

  2.   

    不用linq也许不是本质的问题。本质的问题是,你的程序如何处理很复杂的查询。比如a = 1 or (b = 2 and c = 3)
      

  3.   

    我没想到什么好的方法来实现 实在不行
    public ISession AddWhere(string WhereValue){
        this.Sql +=WhereValue;
    }
    调用的时候session.Select(typeof(Source).Name).AddWhere("a = 1 or (b = 2 and c = 3)");我想我写这样的方法才适合我的等级。
      

  4.   

    我没想到什么好的方法来实现 实在不行
    public ISession AddWhere(string WhereValue){
        this.Sql +=WhereValue;
    }
    调用的时候session.Select(typeof(Source).Name).AddWhere("a = 1 or (b = 2 and c = 3)");我想我写这样的方法才适合我的等级。像hibernate的做法就是内部dsl,让用户以字符串的形式传入查询。那么你内部还需要转化成查询表达式。linq的好处就是,编译器帮你把解析的工作代劳了,你可以直接得到表达式树。