我尝试通过FluentNHibernate在F#项目中配置NHibernate。
static member GetNHibernateConfig =
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(fun c -> c.FromConnectionStringWithKey("connectionString") |> ignore)
.ShowSql())
Visual Studio突出显示“c.FromConnectionStringWithKey”,错误:
根据此程序点之前的信息查找不确定类型的对象。在此程序点之前可能需要类型注释来约束对象的类型。这可能允许解析查找。
答案 0 :(得分:4)
我对此一无所知,但是从网上搜索API文档,我会尝试 改变
fun c ->
到
fun (c:ConnectionStringBuilder) ->
因为这个
告诉我,这可能是c
的类型。
编辑:
(显然类型为MsSqlConnectionStringBuilder
。)
无论如何,更一般地说,如果你在C#中遇到F#而不是推断lambda类型,那么可能
Action
或Func
最简单的方法是显式添加Action
或Func
委托类型,以便F#正确解决重载问题。在这种情况下,我认为正在改变
.ConnectionString(fun c -> ...)
到
.ConnectionString(Action<MsSqlConnectionStringBuilder>(fun c -> ...))
修复它,这通常是解除阻止的最便捷方式。
答案 1 :(得分:1)
不确定原因,但声明函数参数的类型有效:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(fun (c: MsSqlConnectionStringBuilder) -> c.FromConnectionStringWithKey("connectionString") |> ignore)
.ShowSql())
无论如何,你最好在F#中使用FunctionalNHibernate代替FluentNHibernate。