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的操作沒什么大區別,這里就不贅述了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM