昨天剛換了新工作
剛上任就碰到了些問題
新公司這邊使用.NET MVC5,可是資料庫使用PostgreSQL(後面稱pgSQL)
.NET預設無法對pgSQL做操作,所以這案子前面寫的人使用JAVA的模式,把SQL指令存在XML,然後再對SQL操作
可是怎麼辦,我已經變成不使用EF會死星人了!!
只好來研究一下怎麼處理
首先我看到了這篇
Entity Framework Code First For PostgreSQL
我參照他的,步驟
直接在NuGet上面安裝了 Npgsql以及EntityFramework6.Npgsql
可是MS SQL有一個方便的功能,可以直接抓資料表產生edmx,pgSQL沒辦法
於是我又去找了一下
我找到了一個要付費的套件
dotConnect for PostgreSQL
我知道一般都不會用付費套件,所以我們繼續往下看
我們先建立SQL的連結字串
<connectionstrings>
<add name="SampleContext" connectionstring="Server=localhost;Port=5432;Database=SampleDB;User Id=postgres;Password=123456;" providername="Npgsql"></add>
</connectionstrings>
然後需要再System.Data底下修改一下DbProviderFactories 設定:
<system.data>
<DbProviderFactories>
<remove invariant="Npgsql" />
<add name="Npgsql Data Provider" invariant="Npgsql" support="FF" description=".Net Framework Data Provider for Postgresql" type="Npgsql.NpgsqlFactory, Npgsql" />
</DbProviderFactories>
</system.data>
接下來我們就可以開始我們的正戲了
我們先建立一個連結資料庫的DbContext
using System.Data.Entity;
namespace DAL.models
{
public class SampleDbContext : DbContext
{
public SampleDbContext()
: base("name=SampleContext")
{
}
public virtual DbSet<userinfo> UserInfo { get; set; }
}
}
由於沒有工具幫我們產生MODEL,所以我們得自己寫MODEL
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace DAL.models
{
public class UserInfo
{
public int id { get; set; }//流水號
public string user_id { get; set; }//使用者帳號
public string user_name { get; set; }//使用者名稱
}
}
然後我們就可以使用他了嗎?
不,他會發生這樣的事情
慘,MS SQL 預設是dbo,pgSQL不是餒
怎麼辦?
我們再找找
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace DAL.models
{
[Table("user_info", Schema = "public")]
public class UserInfo
{
[Key]
[Column("id_customer")]
public int id { get; set; }//流水號
public string user_id { get; set; }//使用者帳號
public string user_name { get; set; }//使用者名稱
}
}
我們加上了Table名稱以及Schema,這樣就可以讀取了
當然,欄位名稱也可以有所不同
public ActionResult GetUserInfoList()
{
List result;
using (var _db = new SampleDbContext())
{
var tmp_data = _db.UserInfo;
result = tmp_data.ToList();
}
return Json(result, JsonRequestBehavior.AllowGet);
}
此時我們就可以使用EF抓取資料了
理論上,後面這些code,也可以用在別的資料庫上
可以參考
當然還有Create、Update、Delete
不過新工作我暫時用不上,就留給各位研究了
沒有留言:
張貼留言