Na podstawie wspaniałych próbek z Daniel Mohl and his book.EF oszczędności z F # i ASP.NET MVC
Mam i aplikacji ASP.NET MVC w F # z szablonu online dla niego. Do tej pory mam swój model, encje, kontroler, repozytorium, widok ... bardzo ogólny i wielokrotnego użytku, a zapytania są świetne. Ale nie mogę znaleźć sposobu, aby zachować zapisywanie do części DbContext, tak samo jak w przypadku wielokrotnego użytku.
Dla części odpytywanie kodu dla Repository.fs następująco
namespace Melopienso.Repositories
open System
open System.Linq
module Repository =
let get (source:IQueryable<_>) queryFn =
queryFn source |> Seq.toList
let getAll() =
fun s -> query { for x in s do
select x }
let find filterPredFn =
filterPredFn
|> fun fn s -> query { for x in s do
where (fn()) }
let getTop rowCount =
rowCount
|> fun cnt s -> query { for x in s do
take cnt }
........... (dodatkowy kod) ......... ..
iw sterowniku przekazać wszystko, co niezbędne:
namespace Melopienso.Controllers
open System
open System.Web.Mvc
open Melopienso.Models
open Melopienso.Repositories
open Repository
open Utils
[<HandleError>]
type CategoriesController(context:IDisposable, ?repository) =
inherit Controller()
let fromRepository =
match repository with
| Some v -> v
| _ -> (context :?> MelopiensoEntities).Categories
|> Repository.get
new() = new CategoriesController(new MelopiensoEntities())
member this.Index() =
getAll() |> fromRepository |> this.View
override x.Dispose disposing =
context.Dispose()
base.Dispose disposing
[<HttpGet>]
member this.Create() =
this.View()
........... (więcej Code) ...........
Teraz, kiedy zapisywanie problemu polega na tym, jak sprawić, by był on do ponownego użycia. Jeśli przekażę DbSet, potrzebuję sposobu na wywołanie kontekstu, którego nie znam, jak znaleźć go z określonego DbSet (wątpliwość jest nawet możliwa).
Gdybym przechodzić zarówno DbContext i DbSet, mogę nie jedyna opcja uważam hardcode cokolwiek zrobić coś
use nameOfDbContext
nameOfDbContext.NameOfDbSet.Add entity
, ale to po prostu nie wydaje się słuszne.
To wstyd, ale wspaniałe przykłady Daniela nie robią części oszczędzającej w "tradycyjnym" efekcie EF i używają autobusów itp., Co jest wspaniałe, ale najpierw chciałbym, aby podstawowa aplikacja w pełni działała, a następnie poprawiła się stamtąd ze sterownikami Async, skrzynkami pocztowymi itp.
Każda wskazówka byłaby bardzo doceniana. Twoje zdrowie!
Witaj Danny! Minęło dużo czasu, odkąd opublikowałem jego i ostatecznie podjąłem zupełnie inną trasę, ale spróbuję to sprawdzić, ponieważ na pewno będzie to cenne dla innych projektów. Wielkie dzięki! –