加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:15:42 所属栏目:asp.Net 来源:网络整理
导读:基于 Daniel Mohl and his book的优秀样本. 我在F#中使用了ASP.NET MVC应用程序并使用了在线模板.到目前为止,我的模型,实体,控制器,存储库,视图…都非常通用和可重用,查询很棒.但我找不到一种方法来保存DbContext部分同样可以重复使用. 对于查询部分,Reposit
基于 Daniel Mohl and his book的优秀样本.

我在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 }

………..(更多代码)………..

在控制器中,我传递了所有必要的东西:

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方式进行保存部分并使用总线等,这很棒,但我首先希望基本应用程序完全正常工作,然后从那里改进Async控制器,邮箱等

任何暗示都将非常感激.干杯!

解决方法

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

如果您有类型,也可以从DbContext获取DbSet,这也可能有所帮助:

myDbContext.Set<'a>()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读