繁体   English   中英

实体框架不生成结果类

[英]Entity framework doesn't generate result class

首先,我一直在寻找解决方案,但也许我做得不好,因为我可能会遗漏一些概念。

所以我的问题:我正在开发一个应用程序来处理数据库,使用实体框架。 我使用“EF Designer from database”创建模型,导入所有表、函数和存储过程。 问题来了。 当 C# 生成代码时,它还会生成类似“storedProcedureName_Result”的类,顾名思义,它是存储过程的结果。 C# 生成如下代码:

 public virtual ObjectResult<uSP_ListSpecialities_Result> uSP_ListSpecialities()
    {
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<uSP_ListSpecialities_Result>("uSP_ListSpecialities");
    }

没有结果:

public virtual ObjectResult<Nullable<int>> uSP_ListAvailableMedicBi()
        {
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("uSP_ListAvailableMedicBi");
        }

我需要使用这些结果,但 C# 不会为所有存储过程生成这些结果。 这就是我的问题,我不知道为什么。

例如:此存储过程生成结果类:

CREATE PROCEDURE uSP_ListSpecialities
AS
BEGIN
    SELECT  id, nome
    FROM Especialidade 
END

它生成一个uSP_ListSpecialities_Result

但这个没有:

CREATE PROCEDURE uSP_ListAvailableMedicBi
AS
BEGIN
    SELECT P.biPessoa
    FROM Pessoa P
        LEFT JOIN Medico M
            ON( M.biPessoa = P.biPessoa)
    WHERE M.biPessoa IS NULL
END

我在 SQLSMS 上运行了两者,都返回了预期的结果。

先感谢您

uSP_ListAvailableMedicBi 过程返回 Nullable Integer 那么如果它只是一个标准的 .NET 类型,那么生成结果类有什么意义呢?

编辑。

根据你的评论。 它确实为您返回了一张桌子。 它只是没有创建复杂的类型,因为它不需要。 下面的片段将帮助您:

public List<int> GetAvailableMedicBiList()
{
    using(var ctx = YourEntities())
    {
        return (List<int>)ctx.uSP_ListAvailableMedicBi().ToList();
    }
}

我创建了一个返回int的虚拟 sp 并得到以下结果:

在此处输入图片说明

您可以在这里看到,我选择了Complex作为返回集合,然后单击底部的Create New Complex Type ,它为我创建了对象,这就是我假设您想要的。

首先,我一直在寻找解决方案,但也许做得不好,因为我可能缺少一些概念。

所以我的问题是:我正在使用Entity Framework开发与数据库一起使用的应用程序。 我使用“来自数据库的EF Designer”创建模型,导入所有表,函数和存储过程。 问题来了。 当C#生成代码时,它还会生成类似“ storedProcedureName_Result”的类,顾名思义,它是存储过程的结果。 C#生成如下代码:

 public virtual ObjectResult<uSP_ListSpecialities_Result> uSP_ListSpecialities()
    {
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<uSP_ListSpecialities_Result>("uSP_ListSpecialities");
    }

没有结果:

public virtual ObjectResult<Nullable<int>> uSP_ListAvailableMedicBi()
        {
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("uSP_ListAvailableMedicBi");
        }

我需要使用这些结果,但是C#不会为所有存储过程生成这些结果。 那就是我的问题,我不知道为什么。

例如:此存储过程生成结果类:

CREATE PROCEDURE uSP_ListSpecialities
AS
BEGIN
    SELECT  id, nome
    FROM Especialidade 
END

它生成一个uSP_ListSpecialities_Result

但这不是:

CREATE PROCEDURE uSP_ListAvailableMedicBi
AS
BEGIN
    SELECT P.biPessoa
    FROM Pessoa P
        LEFT JOIN Medico M
            ON( M.biPessoa = P.biPessoa)
    WHERE M.biPessoa IS NULL
END

我都在SQLSMS上运行,并且都返回了预期的结果。

先感谢您

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM