2010-05-16 67 views
0

使用时,我有我想从,我所有的DAO对象继承基类型没有发现F#成员,但该成员获得误差进一步下降约没有被定义为:为什么在子类

type BaseDAO() = 
    member v.ExecNonQuery2(conn)(sqlStr) = 
     let comm = new MySqlCommand(sqlStr, conn, CommandTimeout = 10) 
     comm.ExecuteNonQuery |> ignore 
     comm.Dispose |> ignore 

我这种类型的继承:

type CreateDatabase() = 
    inherit BaseDAO() 

    member private self.createDatabase(conn) = 
     self.ExecNonQuery2 conn "DROP DATABASE IF EXISTS restaurant" 

这是我看到的时候我的脚本在交互式shell中运行:

--> Referenced 'C:\Program Files\MySQL\MySQL Connector Net 6.2.3\Assemblies\MySql.Data.dll' 

[Loading C:\Users\jblack\Documents\Visual Studio 2010\Projects\RestaurantService\RestaurantDAO\BaseDAO.fs] 

namespace FSI_0106.RestaurantServiceDAO 
    type BaseDAO = 
    class 
     new : unit -> BaseDAO 
     member 
     ExecNonQuery2 : conn:MySql.Data.MySqlClient.MySqlConnection -> 
          sqlStr:string -> unit 
     member execNonQuery : sqlStr:string -> unit 
     member 
     execQuery : sqlStr:string * 
        selectFunc:(MySql.Data.MySqlClient.MySqlDataReader -> 
            'a list) -> 'a list 
     member f : x:obj -> string 
     member Conn : MySql.Data.MySqlClient.MySqlConnection 
    end 

[Loading C:\Users\jblack\Documents\Visual Studio 2010\Projects\RestaurantService\RestaurantDAO\CreateDatabase.fs] 


C:\Users\jblack\Documents\Visual Studio 2010\Projects\RestaurantService\RestaurantDAO\CreateDatabase.fs(56,14): error FS0039: The field, constructor or member 'ExecNonQuery2' is not defined 

我很好奇我做错了什么。

我试过不继承,只是在函数中实例化BaseDAO类型,但我得到了同样的错误。

我开始在这条路上,因为我有一个属性有相同的错误,所以它似乎可能有一个问题,我如何定义我的BaseDAO类型,但它编译没有错误,这进一步混淆了我对此问题。

回答

2

看起来你可能是个别文件,也许你在历史中有一些东西,而你继承的类在另一个命名空间/模块中,并且你继承了一些没有这个的旧版本会员?

重置您的fsi会话并重新开始,或将其放在.fs文件中以诊断是否有任何错误,但我认为代码没问题,问题在于您如何与FSI交互。

+0

我没想过重置fsi会话。这似乎是诀窍。谢谢。 – 2010-05-16 05:20:57