entity-framework - 在 F# 中,什么时候是 "constant string expression"而不是 "constant string expression"

标签 entity-framework f# app-config

F# 的新手,所以我还是有点习惯“类型推断”。
我正在尝试在 F# 中使用 EntityFramework,当我尝试建立连接时,我收到错误消息,即我的连接字符串(从 app.config 中读取)是“不是有效的常量表达式或自定义属性值”。如果我对连接字符串进行硬编码,那就没问题了,就像您期望的那样。

open FSharp.Configuration
type Settings = AppSettings<"app.config">
let ConnStr = Settings.ConnectionStrings.Model
type private Connection = SqlEntityConnection<ConnectionString=ConnStr, Pluralize = true>

我究竟做错了什么?这样做有不同的“F#方式”吗?

最佳答案

SqlEntityConnection是一个类型提供者。类型提供程序在编译时工作(将它们视为编译器插件;或者,如果您喜欢 Lisp,则将它们视为穷人的宏)。因此,所有类型提供程序参数都需要在编译时知道。

现在,问这个问题:是ConnStr在编译时知道吗?
不,当然不是,因为您想从配置文件中删除它。

您应该使用的方式是:

  • 对连接字符串进行硬编码,将其指向编译时可用的数据库。这将使类型提供者有机会在编译时查看数据库,并从中生成所有类型。
  • 当您调用 Connection.GetDataContext ,给它运行时连接字符串作为参数。这将告诉它连接到您的配置中实际指定的任何数据库,而不是您在编译时硬编码的那个。
  • 关于entity-framework - 在 F# 中,什么时候是 "constant string expression"而不是 "constant string expression",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37684904/

    相关文章:

    c# - 比较 int 时 Linq to Entities 错误?到一个值

    c# - 如何以编程方式修改 WCF app.config 端点地址设置?

    c# - 在 C# winform 中使用 app.config 访问数据库连接字符串

    c# - 使用 ini/appconfig 文件或 sql server 文件来存储用户配置?

    c# - 从 Entity Framework 5 升级到 6

    c# - 为什么向我的实体模型类添加无参数构造函数在这里起作用?有什么影响?

    c# - 何时期望 IEnumerable 以及何时期望来自 Linq 查询的 IQueryable

    f# - 统计记录类型的成员

    f# - 在 Suave 中使用非拉丁字符

    .net - F# 中的线程安全普通随机数生成器