Pen*_*uen 6 .net c# linq entity-framework
我有3张桌子; 我在ADO.NET Entity Framework中编写了一个存储过程.
ALTER PROCEDURE [dbo].[sp_GetDepartmanData]
(@departman nvarchar(50))
BEGIN
SELECT
d.ID, d.Name as DepartmanName,
sb.Salary, sb.email,
sp.Name, sp.SurName, sp.Phone, sp.Married, sp.Address
FROM
Departman d
INNER JOIN StaffsBusiness sb ON d.ID = sb.StaffsPersonelDepartmanID
INNER JOIN StaffsPersonel sp ON sb.StaffsPersonelID = sp.ID
WHERE
d.Name = @departman
END
Run Code Online (Sandbox Code Playgroud)
我需要一个我在下面写的存储过程函数:
var staffPersonel = staffContext.GetPersonelInformationWithDepartmanID("Yaz?l?m");
gvPersonel.DataSource = staffPersonel;
gvPersonel.DataBind();
Run Code Online (Sandbox Code Playgroud)
GetPersonelInformationWithDepartmanID函数我从SQL编写(ADO.NET实体框架中的用户定义函数)有3种替代方案(很傻!!!)但我有3个joininig表!!! 如果我之前加入3桌,我该如何使用?
好的,你需要在这里做几步:
sp_GetDepartmanData到您的Entity Framework模型(作为旁边 - 强烈建议不要调用您的存储过程sp_(something)- 使用sp_前缀保留给仅限Microsoft的系统存储过程)DepartmentDataEntityType或类似的东西; 将从存储过程返回的所有字段添加到该实体类型DepartmentDataEntityType从上面)你现在应该有一个函数导入类似于:
public global::System.Data.Objects.ObjectResult<DepartmentDataEntityType> GetPersonelInformationWithDepartmanID(global::System.String departmentName)
{
global::System.Data.Objects.ObjectParameter departmentNameParameter;
departmentNameParameter = new global::System.Data.Objects.ObjectParameter("departmentNameParameter", departmentName);
return base.ExecuteFunction<DepartmentDataEntityType>("sp_GetDepartmanData", departmentNameParameter);
}
Run Code Online (Sandbox Code Playgroud)
现在可以调用对象上下文中的此函数,以通过数据库中的存储过程检索数据.
渣
编辑:
如果您在执行此操作后收到映射错误("错误3027:未为以下EntitySet/AssociationSet指定映射"),那是因为您创建的实体未映射到任何内容,并且仅在函数导入填充集合时使用这些实体 您需要以某种方式将此实体映射到数据存储,或者您需要将其更改为复杂类型.
要创建复杂类型,只需打开EF设计器并右键单击空白区域.转到添加>复杂类型.您应该会在模型浏览器中看到一个新的复杂类型.右键单击它并添加类似于向实体添加属性的标量属性.然后删除您的实体并重命名您的复杂类型与实体相同.
这就是你所要做的:)
| 归档时间: |
|
| 查看次数: |
9573 次 |
| 最近记录: |