簡體   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