Как использовать класс из библиотеки C # в модуле F #? - PullRequest
2 голосов
/ 02 октября 2019

У меня есть 2 проекта в решении: библиотека классов C # и библиотека F #.

Библиотека C # имеет следующий класс:

using System;

namespace TestFSharpDataLayer.Domain
{
    public class TestData
    {
        public Guid Id { get; set; }
        public string Nickname { get; set; }
        public DateTime StartDate { get; set; }
        public bool Active { get; set; }
        public byte[] Fingerprint { get; set; }
        public char Prefix { get; set; }
        public int Multiplier { get; set; }
    }
}

Я пишу модуль вбиблиотека F # для получения данных из базы данных MSSQL, и я хочу, чтобы моя функция List возвращала массив объектов TestData. Я использую SQLProvider в библиотеке F #.

Код модуля:

namespace TestFSharpDataLayer.Infrastructure

module PersonasRepository = 
    open FSharp.Data.Sql
    open FSharp.Data.Sql.Common
    open TestFSharpDataLayer.Domain

    type private sql = SqlDataProvider<DatabaseProviderTypes.MSSQLSERVER,"server=(localdb)\MSSQLLocalDB;Database=Test;Trusted_Connection=true;">

    let private context = sql.GetDataContext()

    let private ListarInternal (pagina : int) =
        query {
            for c in context.Dbo.TestData do
            sortBy (c.GetColumn "Nickname")
            skip ((pagina - 1) * 15)
            take 15
            select c
        } 
        |> Seq.map EntityToTestData
        |> Seq.toArray

    let private EntityToTestData (entity : sql.dataContext.``dbo.test_dataEntity``) : TestData =
        new TestData(Id = entity["Id"], Nickname = entity["Nickname"])

    let Listar (pagina : int) = 
        match pagina with 
        | t when t > 0 -> ListarInternal(pagina)
        | _ -> null

Проблема в том, что я не могу заставить модуль распознавать класс TestData. На библиотеку C # есть ссылка в библиотеке F #, но предложение open TestFSharpDataLayer.Domain не распознается Intellisense, а также выдает ошибку времени компиляции (TestFSharpDataLayer namespace not defined). Visual Studio не показывает предупреждений.

Что я делаю не так?

...