gpt4 book ai didi

entity-framework - 在Code First 4.1中执行存储过程

转载 作者:行者123 更新时间:2023-12-04 18:14:48 25 4
gpt4 key购买 nike

我了解存储过程映射不受我的支持,我的理解是我应该能够调用存储过程。

我有很多复杂的存储过程,并且与设计人员一起,我可以创建一个复杂的类型,我也很好。

现在,在代码中首先让我们假设我具有以下存储过程,只是将一些愚蠢的东西组合在一起就可以提出一个想法。我想返回一个有1个地址的学生。

在代码中,我有一个学生和地址实体。但是没有StudentAddressEntity,因为它是一个链接表。

我尝试了以下操作,但出现错误

Incorrect syntax near '."}
System.Data.Common.DbException {System.Data.SqlClient.SqlException}


ALTER Procedure [dbo].[GetStudentById]
@StudentID int
AS
SELECT *
FROM Student S
left join StudentAddress SA on S.Studentid = sa.studentid
left join Address A on SA.AddressID = A.AddressID
where S.StudentID = @StudentID

C#代码:
using (var ctx = new SchoolContext())
{
var student = ctx.Database.SqlQuery<Student>("GetStudentById,@StudentID",
new SqlParameter("StudentID", id));
}

那里有示例如何调用sp并先使用参数等在代码中填充complexType。我可以连接到ADO.NET吗?

尝试仅返回没有参数的所有学生的SP我收到此错误

System.SystemException = Cannot create a value for property 'StudentAddress' of type 'CodeFirstPrototype.Dal.Address'. Only properties with primitive types are supported.



是因为我在某种程度上忽略了链接表吗?

有什么建议么?

最佳答案

我相信您的异常(exception)实际上是:

Incorrect syntax near ','.



因为这是无效的语句: "GetStudentById,@StudentID"。它应该没有逗号: "GetStudentById @StudentID"

EF中存储过程的问题在于它们不支持加载导航属性。 EF将仅实现主要实体,并且不会加载导航属性。例如,这可以通过 EFExtensions解决。 EFExtensions用于ObjectContext API,因此您必须检查它是否也可用于DbContext API。

关于entity-framework - 在Code First 4.1中执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com