के साथ ईएफ बचत Daniel Mohl and his book के महान नमूने के आधार पर।एफ # और एएसपी.नेट एमवीसी
मेरे पास ऑनलाइन टेम्पलेट के साथ एफ # में एएसपी.नेट एमवीसी एप्लीकेशन है। अब तक मेरे पास मॉडल, संस्थाएं, नियंत्रक, भंडार, दृश्य है ... सभी बहुत सामान्यीकृत और पुन: प्रयोज्य, और पूछताछ बहुत बढ़िया है। लेकिन मुझे बचत को डीबीकॉन्टेक्स्ट भाग को समान रूप से पुन: प्रयोज्य रखने के लिए कोई रास्ता नहीं मिल रहा है। के रूप में
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()
........... (अधिक संहिता) ...........
: ..और नियंत्रक में मैं सब कुछ आवश्यक पारित
अब, समस्या को सहेजते समय यह पुन: प्रयोज्य बनाने के तरीके में रहता है। अगर मैं डीबीसेट पास करता हूं तो मुझे संदर्भ को कॉल करने का एक तरीका चाहिए, जिसे मैं नहीं जानता कि इसे विशिष्ट डीबीसेट से कैसे ढूंढें (संदेह यह भी संभव है)।
अगर मैं दोनों DbContext और DbSet गुजरती हैं, मैं की तरह
use nameOfDbContext
nameOfDbContext.NameOfDbSet.Add entity
कुछ कर सकते हैं नहीं मैं कुछ भी हार्डकोड करने लगता है ही एकमात्र विकल्प है, लेकिन यह सिर्फ सही नहीं लगता है।
यह शर्म की बात है लेकिन डैनियल के महान उदाहरण "पारंपरिक" ईएफ तरीके से बचत भाग नहीं करते हैं और बसों का उपयोग करते हैं, जो कि बहुत अच्छा है लेकिन मैं पहले मूलभूत आवेदन पूरी तरह से काम करना चाहता हूं, और फिर बेहतर करना चाहता हूं वहां से Async नियंत्रक, मेलबॉक्स, आदि
किसी भी संकेत की सराहना की जाएगी। चीयर्स!
हैलो डैनी:
यदि आप प्रकार है, जो भी मदद कर सकता है है, तो आप भी एक
DbContext
से एकDbSet
प्राप्त कर सकते हैं! जब से मैंने उसे पोस्ट किया है, तब से यह काफी समय हो गया है और मैंने अंत में एक पूरी तरह से अलग रास्ता लिया है, लेकिन मैं इसे जांचने की कोशिश करूंगा क्योंकि यह निश्चित रूप से अन्य परियोजनाओं के लिए मूल्यवान होगा। आपका बहुत बहुत धन्यवाद! –