Based on large samples from Daniel Moth and his book .
I have an ASP.NET MVC application in F # with an online template for it. As long as I have my model, entities, controller, repository, view ... everything is very generalized and reusable, and the request is very large. But I can’t find a way to keep saving part of the DbContext equally reusable.
For the query part, the code for Repository.fs is as follows
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 }
........... (More code) ...........
And in the controller I transfer everything I need:
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()
........... (More code) ...........
, . DbSet, , , DbSet (, ).
DbContext DbSet, -
use nameOfDbContext
nameOfDbContext.NameOfDbSet.Add entity
, , .
, "" EF .., , , , Async, ..
. !