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