从实体框架中的函数使用(var db = new MyAppContext)删除锅炉板

时间:2015-08-28 02:01:56

标签: c# entity-framework using

使用实体框架时,将数据函数包装在using语句中是一种标准做法。 e.g。

using(var db = new MyAppContext())
{
    return db.Books.ToList();
}

通常里面只有一个return语句。有没有办法做到这一点,而不必每次都写入using语句。使用新的c#功能,该功能将更容易编写。

public IList<Book> GetAllBooks() => db.Books.ToList()

我有很多方法可以使用这样的块,如果没有它可以做到这一点,它将使代码更简单。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我不能说我完全赞同你想要的东西,但是,代码如下:

public static class Extensions
{
    public static TOut DisposeWrapper<TDisposable, TOut>(this TDisposable input, Func<TDisposable,TOut> function) where TDisposable:IDisposable
    {
        try
        {
            return function(input);
        }
        finally
        {
            input.Dispose();
        }
    }
}

或者,您可以使用包装,它具有完全相同的效果,可能更简洁:

public static class Extensions
{
    public static TOut DisposeWrapper<TDisposable, TOut>(this TDisposable input, Func<TDisposable,TOut> function) where TDisposable:IDisposable
    {
        using (input) return function(input);
    }
}

会让你做一些类似于你想要的事情。使用起来略显冗长,例如:

public static int ExampleUsage() => new Example().DisposeWrapper(x => x.SomeMethod());

为了完整起见,这是我用来测试此功能的示例类:

public class Example : IDisposable
{
    public void Dispose()
    {
        Console.WriteLine("I was disposed of");
    }

    public int SomeMethod() => 1;
}