EF 6 Code First存储过程 – 只读

我搜索了一些post,但是很短。 我首先使用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(null); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.ComplexType(); } public virtual ObjectResult uspGetJobs(string startDate) { var startDateParameter = startDate != null ? new ObjectParameter("startDate", startDate) : new ObjectParameter("startDate", typeof(string)); return ((IObjectContextAdapter)this).ObjectContext.("uspGetJobs", startDateParameter); } } 

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

  public virtual List uspGetJobs(string startDate) { var startDateParameter = startDate != null ? new SqlParameter("startDate", startDate) : new SqlParameter("startDate", typeof(string)); return this.Database.SqlQuery("uspGetPlannedJobs @startDate, @locationCode", startDateParameter, locationCodeParameter).ToList(); }