投稿

6月, 2017の投稿を表示しています

.net の Entity Framework の Postgresql 用ツール

最近、.net 4.5 、Entity Framework6 を使って、Postgresql に接続するツールを作っていますが、 Entity Framework は、1テーブル1Entityクラス(Webと似たような感じ)を作るみたいですね。 さらに言うと、コードファーストなので、「Entityを作って→DB・テーブルを作成する」が推奨です。 で、DBが既に存在する物に対してEntity Frameworkを使うとなると相当めんどくさい… と言う訳で、取り敢えず自分用に、PostgresqlのDDLからEntityクラスを作るツールを作ってみました。 もし良かったら使ってみて下さいませ。 Github に公開しておきます https://github.com/pianyi/CreateEntity4Postgres 要望が有れば、GithubのIssue にでも書いて見て下さい。 検討します。 Entity Framewrok Core にも対応させたいです…(要望) 検索用:Entity Framework Postgresql Generator テーブルからEntityを作る Table To Entity

Entity Framework と バッチ処理

Entity Framework 削除等をする場合、キーで削除しようとしても削除データが100件ある場合、100個のSQLが実行されます 遅いんじゃボケっ! と言う訳で、バッチ処理できないかなーと探していたらありました。 EntityFramework Plus GithubURL : https://github.com/zzzprojects/EntityFramework-Plus 公式?サイト: http://entityframework-plus.net これを使えば、100件あってもキーが同じなら1つのSQLで終わります。 更新の場合も早いようです。 ただしっ! Entity Framework のトランザクション管理は使われない(SaveChangesメソッド)では出来ないので、 自分でトランザクション管理をしなければだめです… 面倒ですね。 こうなると、【Database.ExecuteSqlCommand(DELETE FROM XXXX WHERE XXXX=123)】とやるのとどっちが良いのだろう? と思ってしまいます… ま、楽な方で! EntityFramework 標準: これをすると、データが100件ある場合は、100個のSQLが実行されます。 Context.Entity.RemoveRange(Entity.Where(e => e.Id == 123)); Context.Entity.SaveChanges(); EntityFramework Plus: これをすると、データが100件ある場合は、1個のSQLが実行されます。 using Z.EntityFramework.Plus; … using (MyContext con = new MyContext()) { using (var tran = con.Database.BeginTransaction()) { try { con.Entity.Where(e => e.Id == 123).Delete(); tran.Commit(); } catch (Exception) ...

Entity Framework と PostGIS

.net から Postgresql に接続して動作させるソフトを作っているのですが Postgresql には POSTGIS をインストールしていたが、どうにもこうにも、geometryデータの取得が出来ない エラーになるか、データが0か… と言う訳で、確認した所、 URL: https://github.com/npgsql/npgsql/issues/807#issuecomment-236825653 本文: PostGIS is supported at the ADO.NET level, but the EF6 provider doesn't support it yet. The relevant issue is npgsql/EntityFramework6.Npgsql#18. Note that EF Core already supports the PostGIS types. 適当な訳: PostGSIは、ADO.NET では対応しているが、EF6(Entity Framework6)では対応していない。 EF Core(Entity Framework Core) では対応してるから、そっち使ってね との事でした…orz 今使っているのが、.net Framework 4.5 … EF Core Postgresql のインストールは .net Framework 4.5.1 以上… 使えないやんっ!!!orz 古いバージョンなら使えるのかなぁ… と言う訳で、Entity Framework を使う場合、実行環境が許せば 【4.5.1以上 + EF Core】を使うべきである(6よりも新しいしね) 因みにEF6 で、 ・【PostgisXXXX】系の構造体(変数宣言)を使うと、下記のエラーが表示されます。  PostgisPoint、PostgisLineString、PostgisPolygon等々  例外メッセージ:  【An error occurred while preparing the command definition. See the inner exception for details.】  詳細メッセージ:  【error 3004...