gpt4 book ai didi

entity-framework - 使用 F# 和 ASP.NET MVC 保存 EF

转载 作者:行者123 更新时间:2023-12-04 21:45:27 26 4
gpt4 key购买 nike

基于来自 Daniel Mohl and his book 的优秀样本.

我在 F# 中有一个 ASP.NET MVC 应用程序和它的在线模板。到目前为止,我有我的模型、实体、 Controller 、存储库、 View ……所有这些都非常通用和可重用,并且查询很棒。但是我找不到一种方法来保持对 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

我发现硬编码任何东西的唯一选择,但这似乎不对。

很遗憾,但 Daniel 的优秀示例并没有以“传统”EF 方式进行保存部分并使用总线等,这很好,但我首先想让一个基本应用程序完全运行,然后使用 Async 从那里改进 Controller 、邮箱等

任何提示将不胜感激。干杯!

最佳答案

为什么你不能同时通过 DbContextDbSet ,并使用 DbContext用于保存和访问 DbSet直接(不要尝试通过 DbContext )查询等?

您还可以获得 DbSet来自 DbContext如果你有类型,这也可能有帮助:

myDbContext.Set<'a>()

关于entity-framework - 使用 F# 和 ASP.NET MVC 保存 EF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15205851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com