• Entity Framework PostgresQL CodeFirst


    经过几年的更新及业界对Entity Framework 的认同。 现在 EF 可以支持的数据库越来越多了。而PostgresQL 数据库现在也可以使用code first的方式来创建数据库了。

    不多说了,下面直接上过程。

    首先要安装必要的库

    直接在VS的程序包管理控制台里执行

    Install-Package Npgsql.EntityFramework

    或者右键点引用到 nuget的管理工具里去搜  Npgsql.EntityFramework

    安装时会自动解决依赖,安装EF 6.0  和 Npgsql 驱动

    Model

    code-first  的model 当然是直接写代码了。

    //实体类 
    public class KeyValueTbl
     {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public long Id { get; set; }
    
            [Required]
            public string Value { get; set; }
      }
    // 数据库上下文
    public class DB:DbContext
     {
            public DB() : base("name = Db") { }
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                //EF 默认的schema 是dbo,但是PG默认是public,这里改一下
                modelBuilder.HasDefaultSchema("public");
            }
            public virtual DbSet<KeyValueTbl> KeyValueTbl { get; set; }
      }

    配置

    正常情况下,在安装EF时,程序配置文档就自动添加了的。不过,这里还是贴上完整个的文档

    <?xml version="1.0" encoding="utf-8"?>
    <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>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup>
      <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
            <parameter value="v12.0" />
          </parameters>
        </defaultConnectionFactory>
        <providers>
          <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
          <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, Npgsql.EntityFramework" />
        </providers>
      </entityFramework>
      <system.data>
        <DbProviderFactories>
         <!--  注意这里,安装程序包时,这里的配置并不会自动添加  -->
          <remove invariant="Npgsql" />
          <add name="Npgsql" invariant="Npgsql" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
        </DbProviderFactories>
      </system.data>
      <connectionStrings>
        <!--  与数据库上下文对应的连接字符串, 主机,用户,密码 用你自己的 -->
        <add name="Db" connectionString="Server=localhost;User Id=postgres; Password = postgres; Database=EfDb" providerName="Npgsql"/>
      </connectionStrings>
    </configuration>

    用代码实现数据库初始化

    class Program
        {
            static void Main(string[] args)
            {
                //用你需要的方式初始化 另外两个是 
                //DropCreateDatabaseIfModelChanges
                //CreateDatabaseIfNotExists
                var Initializes = new DropCreateDatabaseAlways<Model.DB>();
                using(Model.DB db = new Model.DB())
                {
                    Initializes.InitializeDatabase(db);
                }
    
                using (Model.DB db = new Model.DB())
                {
                    db.KeyValueTbl.Add(new Model.KeyValueTbl { Value = "Hello World!" });
                    db.SaveChanges();
                    Console.WriteLine(db.KeyValueTbl.First().Value);
                }
    
                Console.ReadKey(true);
            }
        }

    不出意外,你应该可以看到数据,并且可以用其它工具打开数据库,你会发现表已自动创建并且有一条数据。

    当然了,现在的驱动也同时支持Entity Framework 自带的 Migration 工具。使用Migration 可以创建 多列组合的索引,非常好用。因为跟sql server的操作没什么大区别,这里就不赘述了。

  • 相关阅读:
    外贸视频教程[外贸人zencart自助建站视频教程]:第一课
    外贸视频教程[外贸人zencart自助建站视频教程]:第二课
    行sqlSQL*PLUS使用(三)
    消息函数windows 程序设计 第三章 (下)
    优化性能[置顶] Android应用性能优化方案
    自定义方法JSP自定义标签
    发票名称<iframe name=document.getElementById("cellFrame").src = "dyszAction!showFpDyMb.do?fpzldm=" + fpzldm;
    纹理寻址DirectX入门 (8) TextureAddressMode
    空间复杂度分段分段有序数组合并成有序(空间复杂度为O(1))
    数据库生成T4模版在代码生成中的应用心得
  • 原文地址:https://www.cnblogs.com/lyqf365/p/3978359.html
Copyright © 2020-2023  润新知