繁体   English   中英

EF 6代码优先存储过程-只读

[英]EF 6 Code First Stored Procedure - Read Only

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

  1. 我可以先对代码使用ExecuteFunction()吗? 我的存储过程仅返回记录。 我进行此设置的原因是因为存储过程将馈送给另一个应用程序,并且我们希望将对查询的所有更改都放在一个位置(SSMS)。 我意识到我可以使用ExecuteStoredQuery / ExecureStoredCommand ,但是如果我要使用.edmx模型,我想遵守约定。

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

在容器{1}中找不到FunctionImport {0}

我可以使用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();
 }

暂无
暂无

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

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