【问题标题】:how to create postgreSQL database using EF code first如何首先使用 EF 代码创建 postgreSQL 数据库
【发布时间】:2013-10-11 14:34:28
【问题描述】:

我有两个班级 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; }

我定义了 DatabaseContext :

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; }

    }

我已将这些行添加到我的 App.config

<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 并没有添加到我的数据库中。

【问题讨论】:

  • 如果您找到了解决方案,请在此处为我发布...我正在努力启动代码优先项目

标签: c# entity-framework-5 code-first


【解决方案1】:

如下配置您的应用程序: 第 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 步(配置您的 ContextDB)

 public class NameContext:DbContext   
 {
 public NameContext():base(nameOrConnectionString:"maconnexion"){}
    public DbSet<Class1> Class1s{ get; set; }
    public DbSet<Class2> Class2s{ get; set; }}

第三步(调用方法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();
            }}

注意:我建议使用 DataAnnotations 来创建您的业务类,例如: [表(“我的表”,架构 =“我的架构”)] 公共类 ob_group { [钥匙] [列(“nseq_grp”)] 公共 int Nseq_grp {get;set;} 有关更多详细信息,您可以查看: http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx 希望有用

【讨论】:

    【解决方案2】:

    我知道已经有很长时间了,但是人们仍然在这篇文章中。 这是最简单的信息。 基本的,如何配置。带有 PostgreSQL 的实体框架 6:http://lvasquez.github.io/2014-11-24/EntityFramework-PostgreSql/

    如何初始化代码优先。非常图形。 PostgreSQL 实体框架代码优先:https://dotblogs.com.tw/wuanunet/2016/02/26/entity-framework-code-first-postgresql

    可选。避免复数: How turn off pluralize table creation for Entity Framework 5?

    注意:如果您决定不使用代码优先,请记住 PostgreSQL 默认设置为小写,因此请定义是否使用小写装饰或创建区分大小写的表(创建表 public."XyZa")

    【讨论】:

      【解决方案3】:

      我是使用 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
      

      【讨论】:

        猜你喜欢
        • 2018-09-18
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多