C# 先用npgsql和EF6编码

C# 先用npgsql和EF6编码,c#,entity-framework-6,npgsql,C#,Entity Framework 6,Npgsql,我试图先用npgsql和entityframework创建一个简单的代码示例,但不断遇到错误。为什么?我已经读了所有我能读的,但没有找到解决办法 凭据很好,我可以在运行C#的同一台计算机上使用PgAdmin登录而不会出现问题。不创建表。该用户是超级用户 当我尝试.SaveChanges()时,我总是遇到异常UpdateException:更新条目时出错。有关详细信息,请参阅内部异常。内部异常为PostgresException:外部组件引发了异常。 我完全被这弄糊涂了。我认为我的代码中最有针对性

我试图先用npgsql和entityframework创建一个简单的代码示例,但不断遇到错误。为什么?我已经读了所有我能读的,但没有找到解决办法

凭据很好,我可以在运行C#的同一台计算机上使用PgAdmin登录而不会出现问题。不创建表。该用户是超级用户

当我尝试
.SaveChanges()
时,我总是遇到异常
UpdateException:更新条目时出错。有关详细信息,请参阅内部异常。
内部异常为
PostgresException:外部组件引发了异常。

我完全被这弄糊涂了。我认为我的代码中最有针对性的部分是app.config:

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </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-3.2.2.0" newVersion="3.2.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <connectionStrings>
    <add name="contxt" connectionString="User ID=joe;Password=test;Host=192.168.xxx.xxx;Port=5432;Database=mydb" providerName="Npgsql" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
<remove invariant="Npgsql" />
      <add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
    </DbProviderFactories>
  </system.data>


实际代码再简单不过了:

class Program
{
    static void Main(string[] args)
    {
        using (var db = new Contxt())
        {
            var foo = new Foo { Name = "asdf" };
            db.Foos.Add(foo);

            db.SaveChanges();
        }
    }
}

public class Foo
{
    public Int64 Id { get; set; }
    public string Name { get; set; }
}

public class FooMapper : EntityTypeConfiguration<Foo>
{
    public FooMapper()
    {
        ToTable("Foos").HasKey<Int64>(x=>x.Id);
        Property(x => x.Name).HasMaxLength(255).IsVariableLength().IsRequired();
    }
}

public class Contxt : DbContext
{
    public DbSet<Foo> Foos { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("public");
        base.OnModelCreating(modelBuilder);
    }
}
类程序
{
静态void Main(字符串[]参数)
{
使用(var db=new Contxt())
{
var foo=new foo{Name=“asdf”};
db.Foos.Add(foo);
db.SaveChanges();
}
}
}
公开课Foo
{
公共Int64 Id{get;set;}
公共字符串名称{get;set;}
}
公共类FooMapper:EntityTypeConfiguration
{
公共FooMapper()
{
ToTable(“Foos”).HasKey(x=>x.Id);
属性(x=>x.Name).HasMaxLength(255).IsVariableLength().IsRequired();
}
}
公共类上下文:DbContext
{
公共DbSet Foos{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.hasdaultschema(“public”);
基于模型创建(modelBuilder);
}
}