На основе отличных образцов от Daniel Mohl and his book.Сохранение EF с помощью F # и ASP.NET MVC
У меня есть приложение ASP.NET MVC в F # с онлайн-шаблоном для него. Пока у меня есть моя модель, сущности, контроллер, репозиторий, просмотр ... все очень обобщенные и многоразовые, и запрос очень велик. Но я не могу найти способ сохранить сохранение части DbContext в равной степени повторно используемой.
Для запрашивающих частей коды для Repository.fs следующего
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 кода) ......... ..
И в контроллере я прохожу все необходимое:
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 код) ...........
Теперь при сохранении проблемы возникает вопрос о том, как сделать ее пригодной для повторного использования. Если я передаю DbSet, мне нужен способ вызвать контекст, который я не знаю, как найти его из конкретного DbSet (сомневаюсь, что это даже возможно).
Если я прохожу как DbContext и DbSet, я не могу сделать что-то вроде
use nameOfDbContext
nameOfDbContext.NameOfDbSet.Add entity
Единственный вариант я считаю Кодирую ничего, но это просто не кажется правильным.
Это позор, но великие примеры Даниэля не делают экономичную часть в «традиционном» способе EF и используют автобусы и т. Д., Что отлично, но я сначала хотел бы, чтобы основное приложение полностью работало, а затем улучшало оттуда с контроллерами Async, почтовыми ящиками и т. д.
Подсказка была бы принята с благодарностью. Ура!
Привет Дэнни! Прошло много времени с тех пор, как я опубликовал его, и я, наконец, занял совершенно другой маршрут, но я попытаюсь проверить его, поскольку он наверняка будет полезен для других проектов. Большое спасибо! –