jmz*_*ski 10 c# stored-procedures entity-framework ef-code-first
我搜索过一些帖子,但是很短.我首先使用EF6代码尝试从已在数据库中设置的存储过程中获取结果.我的应用程序很简单,它从两个不同的服务器获取数据,执行一些业务逻辑,然后向用户显示.我可以使用.edmx文件正常,它将函数映射到xml文件中.当我使用Power Tools向自己展示XML文件时,我没有看到下面代码中的函数导入,所以我要么缺少设置,要么我无法使用ExecuteFunction().
我可以ExecuteFunction()先使用with代码吗?我的存储过程只返回记录.我有这个设置的原因是因为存储过程提供另一个应用程序,我们希望在一个地方(SSMS)保留对查询的所有更改.我意识到我可以使用ExecuteStoredQuery/ ExecureStoredCommand,但是如果我要使用该.edmx模型,我想坚持惯例.
如果我可以使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
因为它是一个只读存储过程,所以我最终做了这个,而不是试图模仿生成的模型.
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();
}
Run Code Online (Sandbox Code Playgroud)