我创建了一个类库并通过nugget
安装了npgsql ef6<packages>
<package id="EntityFramework" version="6.1.3" targetFramework="net45" />
<package id="EntityFramework6.Npgsql" version="3.1.0" targetFramework="net45" />
<package id="Npgsql" version="3.1.0" targetFramework="net45" />
<package id="Npgsql.EF6" version="2.0.12-pre4" targetFramework="net45" />
</packages>
我已经添加了数据类和上下文类,如下所示
public class MatterContext : DbContext
{
public MatterContext() : base(nameOrConnectionString: "connString") { }
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("public");
base.OnModelCreating(modelBuilder);
}
}
[Table("users", Schema="public")]
public class User
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
[Column("created_on")]
public DateTime CreatedOn { get; set; }
[Column("created_by")]
public User CreatedBy { get; set; }
}
我的App.config看起来像
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<system.data>
<DbProviderFactories>
<!--<remove invariant="Npgsql" />-->
<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="connString" connectionString="server=127.0.0.1;port=3501;user id=devUser;password=devPass;database=urm" providerName="Npgsql" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, EntityFramework6.Npgsql" />
<providers>
<!--<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />-->
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
</providers>
</entityFramework>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.12.0" newVersion="2.0.12.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我还启用了迁移并添加了初始迁移文件。我是配置文件。
当我尝试以详细模式更新数据库时,我在控制台
下面得到错误输出Using StartUp project 'Test.ConsoleApp'.
Using NuGet project 'Database.Gravity'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
**Target database is: 'connString' (DataSource: .\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).**
Applying explicit migrations: [201606211302325_Initial].
Applying explicit migration: 201606211302325_Initial.
**IF schema_id('public') IS NULL
EXECUTE('CREATE SCHEMA [public]')**
System.Data.SqlClient.SqlException (0x80131904): **There is already an object named 'public' in the database.**
CREATE SCHEMA failed due to previous errors.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
...
at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ClientConnectionId:3d5f2fde-c99b-4e8d-aade-e6fe24f670e3
Error Number:2714,State:6,Class:16
**There is already an object named 'public' in the database.
CREATE SCHEMA failed due to previous errors.**
从这一点来说,我将有3个问题:
已经有一个名为&#39; public&#39;在数据库中。
我的PostgreSQL版本是9.5