2

我看到您可以指定插入、更新和删除存储过程,但对于 SELECT 存储过程没有直接的方法。

4

3 回答 3

1

我认为您要查找的内容并不完全可能,因为实体必须映射到表格或某种视图。存储过程不是您可以针对其定义实体的东西。

但是,当然可以为存储过程创建映射,告诉 Linq2Sql 在执行时返回实体,并在 DataContext 类中放置一个方法来运行存储过程并获取实体列表。这些实体的执行与从常规表映射创建的实体相同,因此对它们调用 SubmitChanges() 将使用您为该实体类型创建的任何插入/更新/删除存储过程。

最好的办法可能是看一下Scott Guthrie 的这个演练

于 2009-08-10T22:45:01.447 回答
0

这是可行的,但不能通过视觉拖放工具。你必须做三件事:

  1. 从 datacontext 类创建一个新方法,该方法将被调用以“获取”您的数据

    public partial class DatabaseDataContext {
    [Function(Name = "dbo.Contact_Get")]
    [ResultType(typeof(Contact))]
    [ResultType(typeof(int))]
    public IMultipleResults GetContacts([Parameter(Name = "PageIndex", DbType = "Int")] System.Nullable<int> pageIndex, [Parameter(Name = "PageSize", DbType = "Int")] System.Nullable<int> pageSize, [Parameter(Name = "Sort", DbType = "NVarChar(10)")] string sort, [Parameter(Name = "ContactTypeId", DbType = "Int")] System.Nullable<int> contactTypeId) {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), pageIndex, pageSize, sort, contactTypeId);
        return ((IMultipleResults)(result.ReturnValue));
    }
    

    }

  2. 为您希望在 CustomPages 文件夹中控制选择的特定表创建一个新的页面模板(例如 List.aspx)。

  3. 控制 gridview 的选择机制。

    protected void GridDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) {
    DatabaseDataContext db = new DatabaseDataContext();
    IMultipleResults results = db.GetContacts(e.Arguments.StartRowIndex, e.Arguments.MaximumRows, e.Arguments.SortExpression, (int?)e.WhereParameters["ContactTypeId"]);
    e.Result = results.GetResult<Contact>().ToList();
    e.Arguments.TotalRowCount = results.GetResult<int>().Single<int>();
    

    }

查看 DD 的 codeplex 站点上的 Dynamic Data SP 示例,该示例向您展示了如何执行此操作:

http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=14473

于 2009-08-11T03:24:59.990 回答
-2

linq-to-sql 是一个非常糟糕的主意......

但是这个存储过程应该允许你做你想做的事

create PROCEDURE [dbo].[usp_GetCompanies] (
    @in_filter nvarchar(2000)
)
AS
    declare @sql nvarchar(max)
    begin
        set @sql = '
        SELECT 
            c.id as company_id, c.name as company_name
        FROM company c
        WHERE id is not null ' + @in_filter + ' order by c.type, c.name ' 
        exec sp_executesql @sql
    end
return

样本

于 2009-08-07T05:16:22.397 回答