標籤:des style blog color io os 使用 ar for
經過幾年的更新及業界對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的操作沒什麼大區別,這裡就不贅述了。
Entity Framework - PostgresQL CodeFirst