我看到您可以指定插入、更新和删除存储过程,但对于 SELECT 存储过程没有直接的方法。
问问题
2861 次
3 回答
1
我认为您要查找的内容并不完全可能,因为实体必须映射到表格或某种视图。存储过程不是您可以针对其定义实体的东西。
但是,当然可以为存储过程创建映射,告诉 Linq2Sql 在执行时返回实体,并在 DataContext 类中放置一个方法来运行存储过程并获取实体列表。这些实体的执行与从常规表映射创建的实体相同,因此对它们调用 SubmitChanges() 将使用您为该实体类型创建的任何插入/更新/删除存储过程。
最好的办法可能是看一下Scott Guthrie 的这个演练。
于 2009-08-10T22:45:01.447 回答
0
这是可行的,但不能通过视觉拖放工具。你必须做三件事:
从 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)); }
}
为您希望在 CustomPages 文件夹中控制选择的特定表创建一个新的页面模板(例如 List.aspx)。
控制 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 回答