Daniel Mohl and his bookの偉大なサンプルに基づいています。F#とASP.NET MVCでのEFセーブ
私は、F#のASP.NET MVCアプリケーションとそのためのオンラインテンプレートを持っています。これまで私はモデル、エンティティ、コントローラ、リポジトリ、ビューを持っていました...非常に一般化され、再利用可能であり、クエリは素晴らしいです。しかし、私はDbContext部分への保存を同じように再利用できるようにする方法を見つけることはできません。
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 }
...........(詳細コード)を次のようにクエリの一部についてRepository.fsためのコードである......... ..
そして、私は必要なすべてのものを渡しコントローラで:
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()
...........(詳細コード)...........
今、問題を保存すると、それを再使用可能にする方法があります。私がDbSetを渡す場合、コンテキストを呼び出す方法が必要ですが、特定のDbSetからそのコンテキストを見つける方法がわかりません(疑問もあります)。
私はDbContextとDbSetの両方に合格した場合、私は
use nameOfDbContext
nameOfDbContext.NameOfDbSet.Add entity
私は何をハードコーディングするために見つけるが、それはちょうどいないようだ唯一のオプションのような何かを行うことはできません。
ダニエルの偉大な例は、 "伝統的な" EFの方法で節約を行い、バスなどを使うことはありませんが、まず基本的なアプリケーションを十分に動作させてから改善したいと思いますそこから非同期コントローラ、メールボックスなど
すべてのヒントをいただければ幸いです。乾杯!
こんにちはダニーを!私が彼を投稿してからはずっと時間がかかっていて、まったく別のルートをとったのですが、他のプロジェクトにも役立つと確信しています。どうもありがとう! –