【问题标题】:How to Update Multiple Fields from an Object with FSharp.Data.SqlClient如何使用 FSharp.Data.SqlClient 更新对象的多个字段
【发布时间】:2021-05-22 23:00:31
【问题描述】:

我一直在研究 F# 与 CRUD 和 data 的关系。我一直在使用 FSharp.Data.SqlClient

我看不到从对象更新所有字段的简单方法。

例如,我想执行下面的代码 - 然后我想将该数据呈现给网页。网页将进行一些更改(也许) - 然后我想使用该对象来更新数据库。

我不想编写代码来映射每个字段。此外,我仍在努力弄清楚这是如何以不可变的方式完成的。

let getOrders2() = 
    let cmd = new SqlCommandProvider<"
    SELECT top 10 * from orders
    " , connectionString>(connectionString)

    let orders = cmd.Execute()

    let o2 = orders |> Seq.toList

【问题讨论】:

  • @ScottHutchinson 谢谢 - 但我认为您必须在 Dappa 中定义所有 F# 对象?如果您不必这样做,这似乎有点麻烦..

标签: f# fsharp.data.sqlclient


【解决方案1】:

从一个对象一次更新多个字段很简单:

let updateEmployee employee =
    use cmd =
        new SqlCommandProvider<
            "update Employees set \
            FirstName = @FirstName,
            LastName = @LastName
            where EmployeeID = @EmployeeID",
            connectionString>(connectionString)
    let nRows =
        cmd.Execute(
            employee.FirstName,
            employee.LastName,
            employee.EmployeeID)
    assert(nRows = 1)

使用不可变对象编写 Web 应用程序是一个很大的话题。您是只在服务器上使用 F#,还是也在客户端上使用 F#?

【讨论】:

  • 谢谢。服务器上的 F# - 通过 Rest API 公开 DAL。客户端上的 Vuejs(具体来说是 Quasar)我想避免设置每个字段——我的一些表中有很多字段。在这个框架中是否有一种简单的方法可以做到这一点?
  • 您可以有不同的更新语句,只设置每个用例所需的字段。或者,您可以编写并调用使用 XML(或 JSON)的通用存储过程,而不是直接执行 SQL 更新语句。这取决于您想要获得多大的创意。
  • 谢谢,我想我只想更新已更改的字段。所以我会以某种方式需要迭代对象属性并比较它们我猜..?
  • 你可以这样做,但根据我的经验,它几乎总是比它的价值更麻烦。在典型的“CRUD”应用程序中,最好在对象级别有一个“脏”标志,而不是在属性级别进行跟踪。如有必要,您可以稍后进行优化。只是我的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2021-04-04
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多