【问题标题】:Calling SProcs from EF best practice从 EF 最佳实践中调用 SProcs
【发布时间】:2013-09-12 10:50:00
【问题描述】:

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

只使用存储过程,不使用 LINQ to Entities。

这方面的最佳做法是什么?

我只是有一个使用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();
    }
}

【问题讨论】:

  • 我认为最佳做法是将上下文包装在 using 中,以便尽快处理它,但根据 DataAccess 类的生命周期,差异可能可以忽略不计

标签: c# .net entity-framework stored-procedures


【解决方案1】:

是的。你在你的帖子中是推荐的方式,所以你会有类似的东西:

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

        return results;
    }
}

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

【讨论】:

  • 在这种情况下使用using 有哪些优点或缺点?如果我不使用using,当我的DataAccess 对象被垃圾回收时,entities 将被释放?
  • 因为它只在这个方法中,你应该真正使用using 语句,因为它为你提供了没有任何额外代码的异常处理,如果你不使用它,那么你将不得不手动丢弃它,这可能会在出现异常时使您的连接保持打开状态
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 有些 SProcs 也会写。写入有什么问题?
    猜你喜欢
    • 2013-08-17
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多