![](/img/trans.png)
[英]Npgsql.PostgresException: '42P01: relation “table” does not exist'
[英]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; }
}
任何幫助,將不勝感激。
偶然發現了這個問題,雖然遲到了,但我也經歷過使用 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.