Function F#:使用FluntNHibernate时查找不确定类型的对象
我试图通过FluentNHibernate在F#项目中配置NHibernateFunction F#:使用FluntNHibernate时查找不确定类型的对象,function,fluent-nhibernate,f#,Function,Fluent Nhibernate,F#,我试图通过FluentNHibernate在F#项目中配置NHibernate static member GetNHibernateConfig = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008 .ConnectionString(fun c -> c.FromConnectionStringWithKey("connectionString")
static member GetNHibernateConfig =
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(fun c -> c.FromConnectionStringWithKey("connectionString") |> ignore)
.ShowSql())
Visual Studio突出显示“c.FromConnectionStringWithKey”,但出现错误:
基于此程序点之前的信息查找不确定类型的对象。在此程序点之前可能需要类型注释来约束对象的类型。这可能会解决查找问题。我对此一无所知,但通过在web上搜索API文档,我会尝试 改变
fun c ->
到
因为这个
我认为这可能是c
的类型
编辑:
(显然类型是MSSQLSconnectionStringBuilder
)
总之,更一般地说,如果你遇到F#不推断lambda类型而C#推断,那么可能
- 您正在使用具有多个重载的方法
- 一些重载子集使用
或Action
Func
Action
或Func
委托类型,以便F#正确地解决重载问题。在这种情况下,我认为
.ConnectionString(fun c -> ...)
到
.ConnectionString(操作(趣味c->…)
修复了它,这通常是解除阻止的最方便的方法。我对此一无所知,但通过在web上搜索API文档,我会尝试 改变
fun c ->
到
因为这个
我认为这可能是c
的类型
编辑:
(显然类型是MSSQLSconnectionStringBuilder
)
总之,更一般地说,如果你遇到F#不推断lambda类型而C#推断,那么可能
- 您正在使用具有多个重载的方法
- 一些重载子集使用
或Action
Func
Action
或Func
委托类型,以便F#正确地解决重载问题。在这种情况下,我认为
.ConnectionString(fun c -> ...)
到
.ConnectionString(操作(趣味c->…)
修复了它,这通常是解除阻塞的最方便的方法。不确定原因,但声明函数参数的类型有效:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(fun (c: MsSqlConnectionStringBuilder) -> c.FromConnectionStringWithKey("connectionString") |> ignore)
.ShowSql())
无论如何,最好在F#中使用而不是FluentNHibernate。不确定原因,但声明函数参数的类型有效:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(fun (c: MsSqlConnectionStringBuilder) -> c.FromConnectionStringWithKey("connectionString") |> ignore)
.ShowSql())
无论如何,你最好在F#中使用而不是FluentNHibernate。至于为什么,
可能有多个重载。ConnectionString
,C和F类型推理的工作方式不同,我想C能理解,但F不能。@Brian:奇怪的是,一个重载执行操作
,另一个重载执行字符串。不应该有混淆?更准确地说,动作
F#类型推断不能以这种方式工作。如果有两个重载,一个执行操作
,另一个执行字符串,并且您传递了一个lambda,则在键入lambda之前,F#不会解析为操作
一个。是的。我希望您也可以通过显式添加新操作来解决此问题(有趣的是c->
。至于为什么,可能有多个重载。ConnectionString
,c和F类型推理的工作方式不同,我想c会明白,但F不会。@Brian:奇怪的是,一个重载执行操作,另一个重载执行字符串。应该没有混淆?更准确地说,是动作
F#类型推断不是这样工作的。如果有两个重载,一个是执行Action
,另一个是字符串,并且您传递了一个lambda,则F#在检查lambda.C#之前不会解析为动作
一个。我希望您也可以通过显式添加新动作来解决这个问题(有趣的c->
。它与任何重载都不兼容,它说ConnectionStringBuilder->unit
与MsSqlConnectionStringBuilder->unit
不兼容,并且ConnectionStringBuilder->unit
与string
不兼容,然后键入MsSql
前缀。然后我希望它能工作。此外,我希望包装新操作(…)
围绕fun c->
lambda将起作用。它仅在明确说明动作类型参数时起作用,例如动作
它与任何重载都不兼容,它表示ConnectionStringBuilder->unit
与MsSqlConnectionStringBuilder->unit
不兼容,并且ConnectionStringBuilder->单元
与字符串
不兼容,然后键入它并添加MsSql
前缀。然后我希望它会工作。此外,我希望围绕fun c->
lambda包装新操作(…)
会工作。它仅在显式声明操作类型参数时有效,例如操作