我正在使用 EF Core Npgsql NodaTime。在 db 配置中,我使用.UseNodaTime()選項,到目前為止它作業正常 - 所有型別的物體道具NodaTime.Instant都正確映射到timestampPG 型別。但是現在我想添加型別的 prop NodaTime.Duration,根據檔案,它應該映射到 PG interval:
public class TestEntity : EntityBase<long>
{
public Duration Duration { get; set; }
public Instant DateTime { get; set; }
}
當我嘗試為上面的物體生成新的遷移時,出現以下例外:
The property 'TestEntity.Duration' could not be mapped,
because it is of type 'Duration' which is not a supported primitive type or a valid entity type
所以我想我會自己寫值轉換器來映射持續時間,TimeSpan這是映射到 PG 的默認 .net 型別interval:
public class TestEntityConfiguration : IEntityTypeConfiguration<TestEntity>
{
public void Configure(EntityTypeBuilder<TestEntity> builder)
{
builder.Property(e => e.Duration).HasConversion(
duration => duration.ToTimeSpan(),
timeSpan => Duration.FromTimeSpan(timeSpan)
);
}
}
使用自定義值轉換器遷移生成成功:
CREATE TABLE test_entities (
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
created_at timestamp NOT NULL,
updated_at timestamp NOT NULL,
is_deleted boolean NOT NULL,
duration interval NOT NULL, -- OK
date_time timestamp NOT NULL,
CONSTRAINT pk_test_entities PRIMARY KEY (id)
);
但是當我嘗試在一段時間內插入新的 TestEntity 時:
db.TestEntities.Add(new TestEntity()
{
Duration = Duration.FromMinutes(30),
DateTime = DateTime.Now.AsUtc().ToInstant()
});
db.SaveChanges();
我收到以下錯誤:
System.InvalidCastException
Can't write CLR type System.TimeSpan with handler type IntervalHandler
我不確定我在這里缺少什么 - 我是否需要額外的(除了 .UseNodaTime())Npgsql 配置?
包版本:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.8" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.9" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="3.1.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NodaTime" Version="3.1.3" />
uj5u.com熱心網友回復:
支持將 NodaTime Duration 映射到 PostgreSQLinterval僅在 provider 的第 5 版中添加,您必須升級才能使用它。請注意,即將推出的第 6 版(將在幾周內發布)以各種方式大大改進了對 NodaTime 的支持 - 我建議您等待并切換到該版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/345095.html
標籤:。网 实体框架核心 npgsql ef-core-3.1 节点时间
上一篇:VisualStudioNugetPackageManager界面中“Version”列的意義是什么?(與“已安裝”列不同)
