首页 > 代码库 > Entity Framework - PostgresQL CodeFirst

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 = http://www.mamicode.com/"Hello World!" });                db.SaveChanges();                Console.WriteLine(db.KeyValueTbl.First().Value);            }            Console.ReadKey(true);        }    }

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

 

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

Entity Framework - PostgresQL CodeFirst