簡體   English   中英

EF 核心 2.0 Npgsql:42P01

[英]EF Core 2.0 Npgsql : 42P01

我正在使用 EF Core 2.0 學習 Postgresql

在此處輸入圖片說明

我不斷收到此錯誤。 我在谷歌上搜索,但我找不到正確的答案。

這是我的代碼的一些細節; 啟動.CS;

public void ConfigureServices(IServiceCollection services)
    {
        var connectionString =  @"User ID=postgres;Password=postgres;Host=localhost;Port=5432;Database=Test;";

        services.AddEntityFrameworkNpgsql()
            .AddDbContext<DataContext>(options => options.UseNpgsql(connectionString));


        services.AddMvc();
    }

和數據上下文;

public class DataContext : DbContext
{
    public DataContext(DbContextOptions<DataContext> options) : base(options)
    {
    }

    public DbSet<Questions> Questions { get; set; }

}

在此處輸入圖片說明

和我的模型;

public class Questions
{
    public int Id { get; set; }

    public int studentId { get; set; } 

    public string Title { get; set; }

    public int Votes { get; set; }
}

任何幫助,將不勝感激。

好的固定。 我認為 postgresql 是區分大小寫的。

當我改變模型等於數據庫問題就解決了。

這是我的新模型。

在此處輸入圖片說明

偶然發現了這個問題,雖然遲到了,但我也經歷過使用 Oracle(使用Oracle.EntityFrameworkCore ,我需要大寫)和 postgres(使用Npgsql.EntityFrameworkCore ,我需要小寫)的表/列名稱區分大小寫.

我會在這里添加我的決議,以便將來可以幫助其他人。 我通過創建一個擴展方法來解決,如下所示:

public static void LowercaseRelationalTableAndPropertyNames(this ModelBuilder modelBuilder) 
{
    foreach (var entity in modelBuilder.Model.GetEntityTypes())
    {
        entity.Relational().TableName = entity.Relational().TableName.ToLowerInvariant();

        foreach (var property in entity.GetProperties())
        {
            property.Relational().ColumnName = property.Relational().ColumnName.ToLowerInvariant();
        }
    }
}

並使用如下:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.LowercaseRelationalTableAndPropertyNames();
    }

這允許使用混合大小寫構建模型並在運行時轉換如下:

public class Questions
{
    public int Id { get; set; }
    public int StudentId { get; set; }
}

請注意,對於 EFCore 3.0,擴展方法更改如下:

public static void LowercaseRelationalTableAndPropertyNames(this ModelBuilder modelBuilder)
{
    foreach (var entity in modelBuilder.Model.GetEntityTypes())
    {
        entity.SetTableName(entity.GetTableName().ToLowerInvariant());

        foreach (var property in entity.GetProperties())
        {
            property.SetColumnName(property.GetColumnName().ToLowerInvariant());
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM