三九宝宝网宝宝百科宝宝知识

SQL语言中一个linqtosql的泛化模板

11月10日 编辑 39baobao.com

linq,网上已经有很多讨论这个东西的文章,说好的说不好的比比皆是。在这儿我只说自己的观点,我觉得linq的好处就是继承了一种思想,那就是对所有不同格式数据源的统一访问标准。一种技术出来总是很快会被新技术代替,只有思想会延续比较长的时间,甚至可能影响更新换代。个人感觉linq就是一种很好的思想,不知道其他的像ja这样的框架在以后会不会借鉴这种思想,但是我预测在不久的将来我们一定能够看到在非微软的框架中看到这种思想的衍生物。我们在使用linq to sql 的时候,会发现对于每一个数据库实体对象的增删改查都要写很多相类似的代码。虽然这些代码并不是很多,但是对于习惯于重用的我们来说,总是写相似的代码还是有些小不爽的。.中提供了一个很好的工具就是泛化,用来实现算法级别的重用(区别于继承是代码级别的重用),在下面我就会用泛化来实现一个linq to sql 的模板类,使用这个模板,对于简单的单实体对象的简单的增删改查是可以实现的。但是对于很复杂的linq操作,可以继承自该类然后再实现自己的方法,不过考试&emsp提示如果数据库的操作相当复杂的话,建议选用的数据库访问工具是ado. 而不是 linq to sql。仅供探讨。

下面来看具体的代码:

public class Basewhere T:class

{

public DataClasses1DataContext db { get; set; }

public Base()

{

db = new DataClasses1DataContext();

}

/

/ generic method for insert

/

/ DB Entity

/ the entity for insert

public void Insert(T entity)

{

db.GetTable(entity.GetType()).InsertOnSubmit(entity);

db.SubmitChanges();

}

/

/ generic method for query

/

/ DB Entity

/ the result that return by query in DB using lamda

public IEnumerableQuery(Funcmatch)

{

return db.GetTable().Where(match);

}

/

/ generic method for delete

/

/ DB Entity

/ the entity for delete

public void Delete(T entity)

{

db.GetTable(entity.GetType()).DeleteOnSubmit(entity);

db.SubmitChanges();

}

/

/ generic method for update

/

/ DB Entity

/ the entity for updage

public void Update(T entity)

{

the two line below looks like first delete and then insert

the new entity in database is not really update

but actually . optimize them and translate them into

an update sql expression

db.GetTable(entity.GetType()).DeleteOnSubmit(entity);

db.GetTable(entity.GetType()).InsertOnSubmit(entity);

db.SubmitChanges();

}

}

And then show how to use it:

Baseb = new Base();

Education a = new Education

{

Name="gkfdddedddd",

};

b.Insert(a);

var es = b.Query(E =>E.Name == "1234d9");

foreach (Education ee in es)

{

ee.Name = "12349";

b.Update(ee);

b.Delete(ee);

}

以上的代码实现比较简单,应该不会造成理解上的问题,有兴趣探讨的(不仅仅是这些代码,还可以是linq 相关的其他方面)。

推荐阅读
图文推荐