Dotnet Core 2.2 EntityFramework с постгрес - PullRequest
3 голосов
/ 26 сентября 2019

Я следовал документации на веб-сайте Postgres C # .

Когда я запускаю этот код, я получаю:

Тип сущности 'Bar' требует первичногоопределяемый ключ.

POCOs:

public class Foo
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    [Column(TypeName = "jsonb")]
    public Bar Bar { get; set; }
}

public class Bar
{
    public string Prop1 { get; set; }

    public string Prop2 { get; set; }
}

Моя цель состоит в том, чтобы не использовать string в качестве типа свойства Bar и позволить инфраструктуре сущностей обрабатывать JSON-сериализацию, десериализацию,Я не хочу, чтобы Bar была отдельной таблицей.Я хочу, чтобы это был столбец JSON в Foo.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Вам необходимо создать ValueConverter<Bar, string> или использовать выражения функций непосредственно в HasConversion в OnModelCreating.

Пример:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Foo>()
        .Property(x => x.Bar)
        .HasConversion(
        v => JsonConvert.SerializeObject(v),
        v => JsonConvert.DeserializeObject<Bar>(v));                

    base.OnModelCreating(modelBuilder);
}

Ссылка: https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions

0 голосов
/ 27 сентября 2019

После обновления до .NET Core 3.0 с 2.2 все работало нормально.Ниже приводится новый csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">
    <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
        <AssemblyName>App</AssemblyName>
        <RootNamespace>App</RootNamespace>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.App" />
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0" />
        <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.0.0" />
    </ItemGroup>
</Project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...