从 EF 最佳做法调用 SProcs

本文关键字:调用 SProcs EF 最佳 | 更新日期: 2023-09-27 18:31:00

我已经将一些存储过程导入到 EF 中。

将仅使用存储过程,而不使用 LINQ to 实体。

对此有哪些最佳实践?

我只有一个使用Entities字段调用存储过程的类:

public class DataAccess : IDataAccess
{
    private readonly MyEntities entities = new MyEntities();
    public IEnumerable<MyObj> GetMyObJects()
    {
        return entities.GETMyObj().Select(x => new MyObj { Name = x.NAME }).ToList();
    }
    public IEnumerable<MyObj2> GetMyObJects2()
    {
        return entities.GETMyObj2().Select(x => new MyObj2 { Name = x.NAME }).ToList();
    }
    public IEnumerable<MyObj3> GetMyObJects3()
    {
        return entities.GETMyObj3().Select(x => new MyObj3 { Name = x.NAME }).ToList();
    }
} 

这是推荐的吗?我应该为每种方法使用新Entities吗?

如下:

public IEnumerable<MyObj3> GetMyObJects3()
{            
    using(MyEntities entities = new MyEntities())
    {
        return entities.GETMyObj3().Select(x => new MyObj3 { Name = x.NAME }).ToList();
    }
}

从 EF 最佳做法调用 SProcs

是的。 你在你的帖子中的内容是推荐的方式,所以你会有这样的东西:

public IEnumerable<MyObj3> GetMyObJects3()
{            
    using(MyEntities entities = new MyEntities())
    {
        ObjectResult<SPResult> Results = entities.GetMyObJects3();
        IEnumerable<MyObj3> results = Results.ToList();
        return results;
    }
}

使用 EDMX 文件 创建函数导入。在此示例中,GetMyObJects3()是函数导入。

Julie Lerman 写了一篇非常全面的文章,其中包含有关此主题的示例代码,它位于此处。

只要您的代码仅从数据库中读取数据,我认为这样做没有任何问题。