与带有存储过程的Linq到SQL一起使用的一个或多个泛型类
本文关键字:泛型类 一个 存储过程 Linq 一起 SQL | 更新日期: 2023-09-27 17:59:32
我是Linq的新手,以前一直在使用Ado.net类。
我想在存储过程中使用Linq to SQL。可以共享泛型类的代码(或代码链接)来调用不同的存储过程吗。我不想为每个数据库实体制作单独的DAL类/方法。
感谢
在泛型的情况下,您可能仅限于基本的CRUD操作。在这种情况下,您应该能够使用表:
DataContext ctx;
var table = ctx.GetTable<Foo>();
table.InsertOnSubmit(newObject);
table.DeleteOnSubmit(oldObject);
(使用为更新指定的SPROC,更新应适用于已更改的实体)。
然后,SubmitChanges
将自动使用正确的存储过程(您可以在设计器或DBML中指定用于插入、更新和删除的SPROC。棘手的是get。它不会直接在ctx上公开……我唯一的建议是基于数据上下文和反射的基于名称的模式?所以,也许可以使用GetFoo
方法来获取Foo
.
当然,另一种方法是实现多个通用接口,即
partial class MyDataContext : IFetch<Foo>, IFetch<Bar>
{
Foo IFetch<Foo> Get(int key) { .. call get method on ctx ..}
Bar IFetch<Bar> Get(int key) { .. call get method on ctx ..}
}
interface IFetch<T>
{
T Get(int key);
}
(扩展了数据上下文)
然后您可以投射数据上下文:
var fetch = ctx as IFetch<T>();
return fetch.Get(key);
如果您正试图将此类存储过程用于CRUD目的,您可以在edmx文件(包含DB实体的文件)中,右键单击要对其执行操作的类,然后选择Stored Procedure Mapping
。在那里,您可以找到一个列表,列出您可以对此类对象执行的操作。
第页。S.:在创建模型时,您还必须从DB导入存储过程。