与带有存储过程的Linq到SQL一起使用的一个或多个泛型类

本文关键字:泛型类 一个 存储过程 Linq 一起 SQL | 更新日期: 2023-09-27 17:59:32

我是Linq的新手,以前一直在使用Ado.net类。

我想在存储过程中使用Linq to SQL。可以共享泛型类的代码(或代码链接)来调用不同的存储过程吗。我不想为每个数据库实体制作单独的DAL类/方法。

感谢

与带有存储过程的Linq到SQL一起使用的一个或多个泛型类

在泛型的情况下,您可能仅限于基本的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导入存储过程。