Sto imparando Postgresql con EF Core 2.0
Sto continuando a ricevere questo errore. Ho cercato su google ma non riesco a trovare la risposta giusta.
Ecco alcuni dettagli del mio codice; Startup.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();
}
e Data Context;
public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
}
public DbSet<Questions> Questions { get; set; }
}
e il mio modello;
public class Questions
{
public int Id { get; set; }
public int studentId { get; set; }
public string Title { get; set; }
public int Votes { get; set; }
}
Qualsiasi aiuto sarebbe apprezzato.
Va bene. penso che postgresql sia caso sensato.
quando ho cambiato il modello uguale al problema del database è risolto.
ecco il mio nuovo modello.
Mi sono imbattuto in questa domanda e, sebbene in ritardo alla festa, ho anche riscontrato la distinzione tra maiuscole e minuscole con Oracle (usando Oracle.EntityFrameworkCore , dove avevo bisogno di lettere maiuscole) e postgres (usando Npgsql.EntityFrameworkCore , dove avevo bisogno di lettere minuscole) per i nomi di tabella / colonna .
Aggiungerò la mia risoluzione qui in modo che possa aiutare chiunque in futuro. Ho risolto creando un metodo di estensione come segue:
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();
}
}
}
e usando come segue:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.LowercaseRelationalTableAndPropertyNames();
}
che consente ai modelli di essere costruiti con case misti e convertiti in fase di esecuzione come segue:
public class Questions
{
public int Id { get; set; }
public int StudentId { get; set; }
}
Nota, per EFCore 3.0, il metodo di estensione cambia come segue:
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());
}
}
}