如何首先使用 EF 代码创建 PostgreSQL 数据库
本文关键字:创建 PostgreSQL 数据库 代码 EF 何首先 | 更新日期: 2023-09-27 18:33:59
我有两个类 Class1 和 Class2
[Table("CLASS1", Schema = "public")]
public class Class1
{
public int Class1Id { get; set; }
public string Name1 { get; set; }
}
[Table("CLASS2", Schema = "public")]
public class Class2
{
public int Class2Id { get; set; }
public string Name2 { get; set; }
public int Class1Id { get; set; }
public virtual Class1 c1 { get; set; }
我定义了数据库上下文:
public sealed class DatabaseContext : DbContext
{
private static readonly DatabaseContext instance = new DatabaseContext();
public static DatabaseContext Instance
{
get
{
return instance;
}
}
private DatabaseContext()
: base("maconnexion")
{
Database.SetInitializer<DatabaseContext>(null);
}
public DbSet<Class1> table1{ get; set; }
public DbSet<Class2> table2{ get; set; }
}
我已经将这些行添加到我的应用程序配置中
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
<connectionStrings>
<add name="maconnexion"
connectionString="Server=127.0.0.1;Port=5432;Database=DB_Ticketing;UserId=postgres;Password=slots2013;" providerName="Npgsql" />
</connectionStrings>
我在PostgreSQL中创建了一个名为DB_Ticketing的数据库。但是当我执行代码时,表 table1 和 table2 不会添加到我的数据库中。
按如下方式配置应用程序:步骤 1(配置 App.config)(复制和粘贴)
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework,Version=6.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<connectionStrings>
<add name="maconnexion" connectionString="User Id=postgres;Password=slots2013;Host=localhost;Database=DB_Ticketing;" providerName="Npgsql"/></connectionStrings>
<startup>
<supportedRuntime version="v4.0"sku=".NETFramework,Version=v4.0,Profile=Client"/>
</startup>
<entityFramework>
<providers>
<provider invariantName="Npgsql" type="Npgsql.NpgsqlServices,Npgsql.EntityFramework">
</provider>
</providers>
<defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory,Npgsql"/>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql"></remove>
<add name="Npgsql Data Provider" invariant="Npgsql" description="Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql"/>
</DbProviderFactories>
</system.data>
步骤 2(配置上下文数据库)
public class NameContext:DbContext
{
public NameContext():base(nameOrConnectionString:"maconnexion"){}
public DbSet<Class1> Class1s{ get; set; }
public DbSet<Class2> Class2s{ get; set; }}
步骤 3(调用方法 Insert)
public static void Insert(Class1 o)
{
using (var context = new NameContext())
{ //Where "o" it is an object, for example Class1 o=new Class1();
context.Class1s.Add(o);
context.SaveChanges();
}}
Nota:我建议使用DataAnnotations来创建你的业务类,例如: [表("我的表",架构 = "我的架构")] 公开课ob_group { [键] [列("nseq_grp")] public int Nseq_grp {get;set;}有关更多详细信息,您可以看到:http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx我希望它有用
已经有很长时间了,但对于人们来说,仍然会进入这篇文章。这是最简单的信息。基本,如何配置。Entity Framework 6 with PostgreSQL: http://lvasquez.github.io/2014-11-24/EntityFramework-PostgreSql/
如何首先初始化代码。非常形象。PostgreSQL 的实体框架代码优先:https://dotblogs.com.tw/wuanunet/2016/02/26/entity-framework-code-first-postgresql
自选。避免复数:如何关闭实体框架 5 的复数表创建?
注意:如果您决定不使用代码优先,请记住 PostgreSQL 默认设置小写,因此请定义 if 用小写装饰或创建区分大小写的表(创建表公共)。XyZa")
我使用 SQL 查询做到了
SELECT 'public class '||c.table_name ||' { '||
string_agg(case when c.character_maximum_length is not null then '[StringLength(' || to_char(c.character_maximum_length,'9999')||')]' else '' end ||
'public ' ||
(case when c.datetime_precision is not null then ' DateTime' else
case when c.numeric_precision is not null then ' int' else 'string' end end)||
case c.is_nullable when 'YES' then '?'end || ' ' ||c.column_name,'{get;set;} ') ||' {get;set;} }'
FROM information_schema.columns c
where c.table_schema ='public'
group by c.table_name