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

时间:2010-11-20 11:15:24

标签: function fluent-nhibernate f#

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

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

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

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

2 个答案:

答案 0 :(得分:4)

我对此一无所知,但是从网上搜索API文档,我会尝试  改变

fun c ->

fun (c:ConnectionStringBuilder) -> 

因为这个

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

告诉我,这可能是c的类型。

编辑:

(显然类型为MsSqlConnectionStringBuilder。)

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

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

最简单的方法是显式添加ActionFunc委托类型,以便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。