c# - EF 6 代码第一个存储过程 - 只读

标签 c# entity-framework stored-procedures ef-code-first

我搜索了一些帖子,但都没有找到。我首先使用 EF6 代码尝试从已在数据库中设置的存储过程获取结果。我的应用程序很简单,它从两个不同的服务器获取数据,执行一些业务逻辑,然后显示给用户。我可以使用 .edmx文件很好,它映射了xml文件中的功能。当我使用 Power Tools 向自己显示 XML 文件时,我没有看到从下面的代码导入的函数,所以我要么缺少设置,要么无法使用 ExecuteFunction() .

  1. 我可以使用 ExecuteFunction() 吗?先用代码?我的存储过程只返回记录。我有这个设置的原因是因为存储过程为另一个应用程序提供数据,我们希望将对查询的所有更改保存在一个地方 (SSMS)。我意识到我可以使用 ExecuteStoredQuery/ExecureStoredCommand , 但如果我要使用 .edmx 我想坚持惯例模型。

  2. 如果我可以使用 ExecuteFunction ,在哪里以及如何配置我的 DbContext识别存储过程?通过下面的设置,我收到错误

The FunctionImport {0} could not be found in the container {1}

我可以使用 Fluent API 吗?谢谢。

    public class JobContext : DbContext
    {
        public JobContext()
            : base("name=JobContext")
        {
            // My context will only define a slice of the database
            Database.SetInitializer<JobContext>(null);
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.ComplexType<Job>();
        }

        public virtual ObjectResult<Job> uspGetJobs(string startDate)
        {
            var startDateParameter = startDate != null ?
                new ObjectParameter("startDate", startDate) :
                new ObjectParameter("startDate", typeof(string));

            return ((IObjectContextAdapter)this).ObjectContext.<Job>("uspGetJobs", startDateParameter);
        }
    }

最佳答案

因为它是一个只读存储过程,所以我最终这样做而不是尝试模仿生成的模型。

 public virtual List<Jobs> uspGetJobs(string startDate)
 {
    var startDateParameter = startDate != null ?
                             new SqlParameter("startDate", startDate) :
                             new SqlParameter("startDate", typeof(string));

    return this.Database.SqlQuery<PlannedJobs>("uspGetPlannedJobs @startDate, @locationCode", startDateParameter, locationCodeParameter).ToList();
 }

关于c# - EF 6 代码第一个存储过程 - 只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970236/

相关文章:

c# - Azure、ASP.NET Core 2.0、使用客户端证书通过 HttpClient 调用 Post 会导致 "The client certificate credentials were not recognized"

c# - 如何在 Controller 中使用多个 DBContext

MySQL存储过程搜索另一个表

sql - 存储过程 将变量值设置为单个列

c# - 无法确定类型为 > 'System.Data.SqlClient.SqlClientFactory' 的提供程序工厂的提供程序名称

C# 从 MySQL 检索存储过程

c# - 选择不同的MongoDB C#

c# - 使用 HttpClient PostAsJsonAsync 在 ASP.NET Core 中发送 HTTP POST 消息

c# - Azure AD graph api 在本地工作但在部署时失败

c# - ObjectContext的 Entity Framework 和线程安全