基於來自Daniel Mohl and his book的大樣本。EF用F#和ASP.NET MVC保存
我有和F#中的ASP.NET MVC應用程序和它的在線模板。到目前爲止,我有我的模型,實體,控制器,存儲庫,視圖...都是非常普遍和可重用的,而且查詢非常好。但我找不到一種方法來保存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 }
...........(多個碼)......... ..
和Controller我通過一切必要的:
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方式的節省部分,並使用巴士等,這是偉大的,但我首先想有一個基本的應用程序充分工作,然後改善從那裏與異步控制器,郵箱等
任何提示將不勝感激。乾杯!
您好丹尼!自從我發佈他的文章已經很長時間了,我終於採取了完全不同的路線,但我會盡力檢查它,因爲它肯定會對其他項目有價值。非常感謝! – 2013-10-31 09:44:25