zwracanie obiektu w metodzie przy uzyciu bloku using

0

Jeśli w metodzie korzystam z bloku using i w nim zwracam obiekt to jest ok? Bo jeśli ten obiekt, który będę zwracać przypisuje do zmiennej typu var to nie mogę jej zadeklarować bez wartości przed blokiem using.

public JsonResult Index()
{
    using (var context = new BloggingContext()) 
{ 
    // Query for all blogs with names starting with B 
    var blogs = from b in context.Blogs 
                   where b.Name.StartsWith("B") 
                   select b; 

return Json(blogs, JsonRequestBehavior.AllowGet;);
}
}

Czy istnieje jakiś sposób aby ten obiekt blog zwrócić po za zakresem using jeśli przypisuje do go zmiennej typu var?

0

Wydaję mi się że będzie ok, dlatego że nie zwracasz zmiennej context (co mogłoby powodować jakieś problemy) a JSON.
Ale dobrze by było gdyby ktoś to potwierdził ;)

0

Bo chyba innego sposobu w tym przypadku nie ma aby zwrocic to po za blokiem using?

0

Jest. Wystarczy zadeklarować zmienną blogs przed usingiem.

public JsonResult Index()
{
    IQueryable<Blog> blogs = null;
    using (var context = new BloggingContext()) 
    { 
    // Query for all blogs with names starting with B 
        blogs = from b in context.Blogs 
                           where b.Name.StartsWith("B") 
                           select b; 
    }
    return Json(blogs, JsonRequestBehavior.AllowGet);
}
0

Jak będzie nullem to należy dodać po prostu w tym przpadku return? Czy lepiej przechwycić to jako wyjątek?

0

Nie może być nullem. W przypadku braku danych EntityFramework zwróci pustą kolekcję. Najbardziej ekstremalna sytuacja to wyjątek rzucony przez DbContext z powodu na przykład problemu połączenia z bazą danych. Wtedy musisz to obsłużyć osobno.

0

Czyli w bloku using należy jeszcze dodać warunek na nulla albo przechwycić wyjątek?

0

To powinno zadzialac. Jesli chcesz miec dane poza using musisz dane zmaterializowac w bloku using - jesli zrobisz to pozanim wywali blad (zazwyczaj przy standardowych implementacjach)

public JsonResult Index()
{
    IEnumerable<Blog> blogs;
    using (var context = new BloggingContext()) 
    { 
    // Query for all blogs with names starting with B 
    blogs = (from b in context.Blogs 
                   where b.Name.StartsWith("B") 
                   select b).ToList(); 
 
    }
    return Json(blogs, JsonRequestBehavior.AllowGet);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1