簡體   English   中英

在帶有Npgsql的Asp.net 5(vnext)中使用Postgres

[英]Using Postgres in Asp.net 5 (vnext) with Npgsql

我已經將我的應用程序配置為連接到Postgres數據庫,但是在向其中加載一些數據時,它給了我一個錯誤。

首先,這是我包含在project.json中的內容:

"EntityFramework7.Npgsql": "3.1.0-rc1-1",

並在Startup.cs類中:

services.AddEntityFramework()
            .AddNpgsql()
            .AddDbContext<ApplicationDbContext>(options =>
                    options.UseNpgsql(Configuration["Data:DefaultConnection:ConnectionString"]));

這是我的連接字符串:

Server=127.0.0.1;Port=5432;Database=test1;User Id=postgres;Password=mypass123

dnx命令更新數據庫效果很好,但是我必須手動創建“ __EFMigrationsHistory”表。

問題是執行context.SaveChanges時出現以下錯誤:

{Microsoft.Data.Entity.DbUpdateException:更新條目時發生錯誤。 有關詳細信息,請參見內部異常。 ---> Npgsql.NpgsqlException:23502:“ Id”列中的空值違反了非空約束em )em Npgsql.NpgsqlConnector.ReadSingleMessage(DataRowLoadingMode dataRowLoadingMode)em Npgsql.NpgsqlDataReader.ReadMessage()em Npgsql.NpgsqlDataReader.Init()em Npgsql.NpgsqlCommand.Execute(CommandBehavior行為)em Npgsql.NpgsqlCommand.Indbternal() NpgsqlCommand.ExecuteDbDataReader(CommandBehavior行為)em System.Data.Common.DbCommand.ExecuteReader()em Microsoft.Data.Entity.Storage.Internal.RelationalCommand。<> c__DisplayClass17_0.b__0(DbCommand cmd,IRelationalConnection con)em Microsoft.Data.Entity .Storage.Internal.RelationalCommand.Execute [T](IRelationalConnect 離子連接,功能3 action, String executeMethod, Boolean openConnection, Boolean closeConnection) em Microsoft.Data.Entity.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection connection, Boolean manageConnection) em Microsoft.Data.Entity.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection) --- Fim do rastreamento de pilha de exceções internas --- em Microsoft.Data.Entity.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection) em Microsoft.Data.Entity.Update.Internal.BatchExecutor.Execute(IEnumerable 1 commandBatches,IRelationalConnection連接),Microsoft.Data.Entity.Storage.RelationalDatabase.SaveChanges(IReadOnlyList 1 entries) em Microsoft.Data.Entity.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList Microsoft.Data.Entity.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList 1 entries) em Microsoft.Data.Entity.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList保存)和Microsoft.Data.Entity.ChangeTracking。 Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)em Microsoft.Data.Entity.DbContext.SaveChanges(Boolean acceptAll ChangesOnSuccess)em Microsoft.Data.Entity.DbContext.SaveChanges()em SQLite.Migrations.Seed.CriaEndereco()na F:\\ Dados \\ Documents \\ Visual Studio 2015 \\ Projects \\ SQLite \\ src \\ SQLite \\ Migrations \\ Seed.cs: linha 73 em SQLite.Migrations.Seed.Execute(IServiceProvider applicationServices)不適用F:\\ Dados \\ Documents \\ Visual Studio 2015 \\ Projects \\ SQLite \\ src \\ SQLite \\ Migrations \\ Seed.cs:linha 36 em SQLite.Startup.CreateSampleData(IServiceProvider F:\\ Dados \\ Documents \\ Visual Studio 2015 \\ Projects \\ SQLite \\ src \\ SQLite \\ Startup.cs:linha 138 em SQLite.Startup.Configure(IApplicationBuilder應用程序,IHostingEnvironment env,ILoggerFactory loggerFactory)無F:\\ Dados \\ Documents \\ Visual Studio 2015 \\ Projects \\ SQLite \\ src \\ SQLite \\ Startup.cs:linha 128}

Id列應該由實體分配,還是不?

相同的代碼在SqlServer中工作。

更新

這是SqlServer表架構:

CREATE TABLE [dbo].[Ufs] (
    [Id]    INT           IDENTITY (1, 1) NOT NULL,
    [Nome]  NVARCHAR (70) NOT NULL,
    [Sigla] NVARCHAR (2)  NOT NULL,
    CONSTRAINT [PK_Uf] PRIMARY KEY CLUSTERED ([Id] ASC)
);

在這里Postgres:

CREATE TABLE public."Ufs"
(
  "Id" integer NOT NULL,
  "Nome" text NOT NULL,
  "Sigla" text NOT NULL,
  CONSTRAINT "PK_Uf" PRIMARY KEY ("Id")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public."Ufs"
  OWNER TO postgres;

所有這些代碼都是通過遷移自動生成的。

看起來您是使用SqlServer遷移生成了Postgres數據庫的。

我建議您還原並刪除所有遷移,然后再次添加遷移。

Postgres數據庫中的“ Id”列應為“ Serial”類型或類似名稱。

Postgres的“整數”類型不是自動遞增的類型。 默認情況下,分配ID是數據庫的角色。

嘗試將此注釋添加到“ Id”屬性上方。

DatabaseGenerated(DatabaseGeneratedOption.Identity)

相對。 這是一個相關的問題

暫無
暫無

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

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