F#:在使用 FluntNHibernate 时查找不确定类型的对象

Sha*_*lan 2 f# function fluent-nhibernate

我尝试通过 FluentNHibernate 在 F# 项目中配置 NHibernate。

 static member GetNHibernateConfig = 
    Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008
                .ConnectionString(fun c -> c.FromConnectionStringWithKey("connectionString") |> ignore)
                    .ShowSql())
Run Code Online (Sandbox Code Playgroud)

Visual Studio 突出显示“c.FromConnectionStringWithKey”并显示错误:

根据该程序点之前的信息查找不确定类型的对象。在这个程序点之前可能需要一个类型注释来约束对象的类型。这可以允许解决查找。

Bri*_*ian 5

我对此一无所知,但是通过在网络上搜索 API 文档,我会尝试更改

fun c ->
Run Code Online (Sandbox Code Playgroud)

fun (c:ConnectionStringBuilder) -> 
Run Code Online (Sandbox Code Playgroud)

因为这

http://fluentnhibernate.org/api/FluentNHibernate.Cfg.Db/PersistenceConfiguration%602.htm#ConnectionString

向我建议这可能是c.

编辑:

(显然类型是MsSqlConnectionStringBuilder。)

无论如何,更一般地说,如果您遇到 F# 而不是 C# 推断 lambda 类型,那么可能

  • 您正在使用具有多个重载的方法
  • 重载的某些子集使用ActionFunc

最简单的方法是显式添加ActionorFunc委托类型,以便 F# 正确解析重载。在这种情况下,我认为改变

.ConnectionString(fun c -> ...)
Run Code Online (Sandbox Code Playgroud)

.ConnectionString(Action<MsSqlConnectionStringBuilder>(fun c -> ...))
Run Code Online (Sandbox Code Playgroud)

修复它,这通常是解除阻塞的最方便的方法。