Почему член F # не найден при использовании в подклассе - PullRequest
0 голосов
/ 16 мая 2010

У меня есть базовый тип, от которого я хочу унаследовать все мои объекты DAO, но этот член приводит к тому, что ошибка еще не определена:

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"

Вот что я вижу, когда мой скрипт запускается в интерактивной оболочке:

--> 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, но он компилируется без ошибок, что еще больше меня смущает эта проблема.

1 Ответ

2 голосов
/ 16 мая 2010

Похоже, что вы #load используете отдельные файлы, и, возможно, у вас есть кое-что в вашей истории, и класс, который вы наследуете, находится в другом пространстве имен / модуле, и вы наследуете более старую версию без этот член?

Сбросьте ваш сеанс fsi и начните сначала или поместите его в файлы .fs, чтобы определить, действительно ли что-то не так, но я думаю, что код в порядке, и проблема в том, как вы взаимодействуете с FSI.

...