Использование Npgsql.NodaTime в Entity Framework Core

Я использую Entity Framework Core для работы с базой данных PostgreSQL через поставщик данных Npgsql. Согласно руководству по сопоставлению даты и времени, для даты и времени PostgreSQL рекомендуется использовать NodaTime. отображение. В руководстве по установке следующий код включает сопоставление типов NodaTime:

protected override void OnConfiguring(DbContextOptionsBuilder builder) { builder.UseNpgsql("Host=localhost;Database=test;Username=npgsql_tests;Password=npgsql_tests", o => o.UseNodaTime()); }

Но для NpgsqlDbContextOptionsBuilder нет UseNodaTime() метода расширения. Я искал npgsql исходный код, но не нашел этого метода расширения. Я нашел только public static INpgsqlTypeMapper UseNodatime(this INpgsqlTypeMapper mapper) в этом файле.

My .csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.1.0-rc1-final" />
    <PackageReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.0-rc1-final" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="2.1.0-rc1" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="2.1.0-rc1" />
    <PackageReference Include="Npgsql.NodaTime" Version="1.0.0-rc1" />
  </ItemGroup>

</Project>

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.EntityFrameworkCore;
using Doko.Models;
using Doko.Filters;
using Npgsql;

namespace DokoDoko {
  public class Startup {
    public Startup(IConfiguration configuration) {
      Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services) {
      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
      services.AddEntityFrameworkNpgsql().AddDbContext<DokoContext>(
        options => options.UseNpgsql(
          Configuration.GetConnectionString("DokoDatabase"), 
          o => { 
            o.UseNetTopologySuite();
          }
        )
      );
      services.AddCors();
      services.AddScoped<AuthorizationFilter>();
      NpgsqlConnection.GlobalTypeMapper.UseNodatime();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
      if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
      } else {
        app.UseHsts();
      }

      app.UseHttpsRedirection();
      app.UseMvc();
    }
  }
}

person phqb    schedule 23.05.2018    source источник
comment
Так в чем твой вопрос?   -  person vivek nuna    schedule 23.05.2018
comment
Я пытаюсь сделать как этот код, но компилятор этого не сделал t найти метод расширения UseNodaTime ().   -  person phqb    schedule 23.05.2018
comment
В чем ошибка? Вам не хватает использования?   -  person vivek nuna    schedule 23.05.2018
comment
Я пробовал using Npgsql;, using Npgsql.NodaTime, но это не сработало. Я отправил Startup.cs в свой вопрос.   -  person phqb    schedule 23.05.2018
comment
Попробуйте Install-Package NodaTime из консоли диспетчера пакетов или найдите NodaTime в диспетчере пакетов Nuget и установите его.   -  person vivek nuna    schedule 23.05.2018
comment
Проверьте свои версии .NETStandard 2.0 NodaTime (›= 2.2.6) Npgsql (› = 4.0.0-rc1)   -  person vivek nuna    schedule 23.05.2018
comment
Я добавил NodaTime (2.3.0), Npgsql (4.0.0-rc1), Npgsql.NodaTime (1.0.0-rc1) и using Npgsql; using Npgsql.NodaTime; using NodaTime;, но не сработало. Я использую .Net Core 2.1.   -  person phqb    schedule 23.05.2018
comment
Я добавил свой ответ, проверьте.   -  person vivek nuna    schedule 23.05.2018


Ответы (2)


Вам необходимо обновить все до версии 4.0.0-rc1 и установить пакет Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime. Я сообщил о проблеме здесь

person vivek nuna    schedule 23.05.2018

Документация по ссылке неверна (типичный беспорядок перед выпуском). В нем говорится, что вам нужен пакет Npgsql.NodaTime, хотя на самом деле вам нужен _ 2_ пакет:

<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="2.1.0-rc1" />
person Ivan Stoev    schedule 23.05.2018
comment
Спасибо! Теперь способ найден. - person phqb; 23.05.2018