EntityFramwork -> お試し

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-20 (土) 15:57:34 | 最終更新:2018-01-25 (木) 22:58:33

今ひとつピンとこないので
勉強のため、テストプロジェクトを作成。

【環境】
Visual C#: 15.5.4(2017)
経緯

EntityFramework なるものを見つけて
ぜひ挑戦したいと思った。

ただ、慣れない VS 環境であることもあり
なかなかピンとこない。

そこで、参考サイトをそのまま実践してみることにした。

SlideShare:「Entity Framework Coreを使ってみる」 公開用(2017-03-07)

プロジェクト作成
Model プロジェクト
[ファイル]-[新規作成]-[プロジェクト] 「新しいプロジェクト」
左ペイン [インストール済み]-[Visual C#]-[Windows クラシック デスクトップ] 右ペイン [クラス ライブラリ(.NET Framework)] 名前:KptBoardSystem
場所:任意
ソリューション名:「名前」から自動入力
[ソリューションのディレクトリを作成] にチェック
[新しい Git リポジトリの作成] にチェックなし
[OK]
参照設定

プロジェクトコンテキストメニューから [NuGet パッケージの管理] Microsoft.EntityframeworkCore で検索
Microsoft.EntityframeworkCore.Sqlite 2.0.1
Microsoft.EntityframeworkCore.Tools 2.0.1

テストプロジェクト

ソリューションのコンテキストメニューから [追加]-[新しいプロジェクト] 後は前述同様に KptBoardSystemTest プロジェクトを作成。

参照設定

前述同様に、下記を設定。
Microsoft.EntityframeworkCore 2.0.1
xunit 2.3.1
xunit.runner.visualstudio 2.3.1
Moq 4.8.1

初回マイグレーション
クラス作成

P.12 User
P.13 KptBoardModel

コマンド

Enable-Migrations
Enable-Migrations is obsolete. Use Add-Migration to start using Migrations.
Add-Migration setp00
To undo this action, use Remove-Migration.
  1. マイグレーションを可能にする
  2. マイグレーションを追加する
ファイル生成

こんな感じで2ファイルが自動生成された。


KptBoardSystem
┗ Migrations
  ┣ 20180120074120_setp00.cs
  ┗ KptBoardModelModelSnapshot.cs
データベース生成
コマンド

Update-Database
Applying migration '20180120074120_setp00'.
Done.

参考サイト P.15 のように処理がズラズラ並ぶのではなく
とても簡素なリアクションでしたw

ファイルの場所

参考サイトには「ソリューション直下に「kpt.db」が作成される」とあったけど
実際には、ソリューションの2つ上に作成された。

後述の試行錯誤に見られた、テストとの階層の差分があるということは
コマンドを打つ際に、階層を設定するべきなのではないかと思うけど
現在は手法不明。

パス変更

そこで、

KptBoardModel.cs

のパスを下記のように変更したところ、ソリューション直下に作成された。


- var connectionString = new SqliteConnectionStringBuilder { DataSource = "../../../kpt.db" }.ToString();
+ var connectionString = new SqliteConnectionStringBuilder { DataSource = "../kpt.db" }.ToString();

この件には、大きな落とし穴が。。。
詳細は、後述の「試行錯誤」コーナーにて。

注意

コマンドを打つ際に、パッケージ マネージャー コンソールにおいて
「既定のプロジェクト」で何を選択しているかでファイル出力場所が変わる。

“kpt.db” というパスの場合は
プロジェクト直下へ生成されるので
KptBoardSystem を選択していれば、

KptBoardSystem/KptBoardSystem/kpt.db

KptBoardSystemTest を選択していれば、

KptBoardSystem/KptBoardSystemTest/kpt.db

となる。

KptBoardSystem/KptBoardSystem/kpt.db

この場合、テストではファイルが見つからないエラーになってしまうので
「既定のプロジェクト」は注意。

配置

後述の如く、コマンドと実行でファイルパスの意味合いが変わるので
コマンドで生成された DB ファイルを手動で配置換えをした。

テストと本番で DB を分けることも考え
ソリューション直下ではなく、プロジェクト直下としてみる。

つまり、最終的な配置とファイルパスの指定は下記の通り。

KptBoardSystem/KptBoardSystemTest/kpt.db

var connectionString = new SqliteConnectionStringBuilder { DataSource = "../../kpt.db" }.ToString();
注意

このようなやり方にすることで
コマンドを打つ度に
ファイルの移動が必要。

テスト
参照設定

P.18
KptBoardSystemTest プロジェクト内「参照」のコンテキストメニュー [参照の追加] 「参照マネージャー」
左ペイン [プロジェクト]-[ソリューション] 中央ペイン [KptBoardSystem] にチェック
[OK]

クラス作成

P.19 KptBoardModelTest


using Xunit;

namespace KptBoardSystem.Test
{
    public class KptBoardModelTest
    {
        [Fact]
        public void TestInsertUser()
        {
            using (var db = new KptBoardModel())
            {
                var user = new User
                {
                    Name = "User01"
                };
                db.Add(user);

                db.SaveChanges();
            }
        }
    }
}
テスト エクスプローラー
[テスト]-[ウィンドウ]-[テスト エクスプローラー] で、開くことができる。

実施
[テスト]-[実行]-[全てのテスト] または、テスト エクスプローラーにて、対象テストを選択した上で
[テスト]-[実行]-[選択したテスト] で、テストを開始。

P.38
例外

私の記述ミスのせいで、


var kptBoard = db.KptBoards.Where(b => b.Problem.Contains("続ける")).First();

こちらが空になってしまった。

その際、下記のエラーが出た。

[2018/01/21 12:28:10 Error] [xUnit.net 00:00:01.7574752] KptBoardを修正する [FAIL] [2018/01/21 12:28:10 Informational] [xUnit.net 00:00:01.7585683] System.InvalidOperationException : シーケンスに要素が含まれていません
テストのデバッグ
[テスト]-[デバッグ] から、テストのデバッグをできる。

まだ使い方はよくわからない。

LINQ

P.34 では、u が括弧書きだったのに
今回は括弧がつかない理由がわからない。


var user02 = db.Users.Where((u) => u.Name == "User02").Include("KptBoards").First();

var kptBoard = db.KptBoards.Where(b => b.Problem.Contains("続ける")).First();

LINQ を勉強すべし。

試行錯誤
テスト実施1
エラー

テスト初回実行時、下記のエラーが出た。

[2018/01/20 17:48:52 Error] [xUnit.net 00:00:01.4263057] KptBoardSystem.Test.KptBoardModelTest.TestInsertUser [FAIL] [2018/01/20 17:48:52 Informational] [xUnit.net 00:00:01.4272062] System.Exception : You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling SQLitePCL.Batteries.Init().
原因

Google 先生に質問したところ、どうやら下記パッケージが不足していることらしい。

解決

テストプロジェクトへインストール。


Install-Package SQLitePCLRaw.bundle_e_sqlite3 -Version 1.1.9
Install-Package SQLitePCLRaw.bundle_sqlcipher -Version 1.1.9
Install-Package SQLitePCL.bundle_green -Version 0.9.3

NuGet パッケージ管理からインストールしても OK だと思う。

参考サイト

stackoverflow:Cannot run SQLite.net PCL in ASP.NET MVC(2017-02-09)

テスト実施2
エラー

上記エラーが取れてホッとしつつテストを行うと
次は下記エラーが出た。

[2018/01/20 21:48:11 Error] [xUnit.net 00:00:01.5294057] KptBoardSystem.Test.KptBoardModelTest.TestInsertUser [FAIL] [2018/01/20 21:48:11 Informational] [xUnit.net 00:00:01.5303380] Microsoft.EntityFrameworkCore.DbUpdateException : An error occurred while updating the entries. See the inner exception for details.
[2018/01/20 21:48:11 Informational] [xUnit.net 00:00:01.5304014] —- Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: ‘no such table: Users’.

Users テーブルが見つからないってさ。。。

調査
DB

kpt.db の中には、確かに Users テーブルがある。

ファイルパス

上で、DB ファイルへのパスを変えたからかもしれないと思い
パスを戻すと、エラーが出ないときもあるけど、確実ではないし
値は書き込まれない。

DB 接続

そもそも DB 接続に失敗しているのかと思って
ファイルパスを存在しないパスにしてみたら
エラー内容が下記の通り変わったので、接続には成功しているみたい。

[2018/01/20 21:52:21 Error] [xUnit.net 00:00:01.3878517] KptBoardSystem.Test.KptBoardModelTest.TestInsertUser [FAIL] [2018/01/20 21:52:21 Informational] [xUnit.net 00:00:01.3888267] Microsoft.Data.Sqlite.SqliteException : SQLite Error 14: ‘unable to open database file’.
ファイル実体

途方に暮れて、ソリューションディレクトリをあちこち見ていたら
想定外の場所に kpt.db ファイルが!!!

原因

コマンドで作成した kpt.db のファイルパスと
テストコードが参照する kpt.db のファイルパスが
異なることが原因だった。

と言っても、何かがおかしいので
いずれわかる日が来ると信じたい。

ともかく、下記のような検証結果だった。


GrandMother
┣ Mother
┃ ┣ KptBoardSystem
┃ ┃ ┣ KptBoardSystem
┃ ┃ ┣ KptBoardSystemTest
┃ ┃ ┃ ┣ bin
┃ ┃ ┃ ┃ ┣ Debug
┃ ┃ ┃ ┃ ┃ ┗ kpt.db // テスト "kpt.db"
┃ ┃ ┃ ┃ ┣ Release
┃ ┃ ┃ ┃ ┗ kpt.db // テスト "../kpt.db"
┃ ┃ ┃ ┗ kpt.db // コマンド "kpt.db"、テスト "../../kpt.db"
┃ ┃ ┗ kpt.db // コマンド "../kpt.db"、テスト "../../../kpt.db"
┃ ┗ kpt.db // コマンド "../../kpt.db"
┗ kpt.db // コマンド "../../../kpt.db"

つまり
コマンドは、プロジェクトディレクトリがルート。
テスト(実行)は、アセンブリ(.dll)本体のある場所がルート?

Posted by muchag | C#,Visual Studio |
初回投稿:2018-01-20 (土) 15:57:34 | 最終更新:2018-01-25 (木) 22:58:33

AngularJS Eclipse 1.2.0

Posted by muchag | AngularJS,Eclipse,Library & PlugIn & AddIn |
初回投稿:2017-09-03 (日) 11:21:41 | 最終更新:2018-11-18 (日) 18:59:30

AngularJS 用プラグイン。
eclipse marketplace:AngularJS Eclipse

【環境】
AngularJS Eclipse: 1.2.0.201606160950
Eclipse: Oxygen (4.7)
OS: Windows10 Pro 64bit
インストール

マーケットプレイスからインストール。

適用

プロジェクトのコンテキストメニュー
[構成]-[Convert to AngularJS Project…]

Term Plugin の
[モジュール] というダイアログが出るので [適用して閉じる]

設定
検証

プロジェクトのコンテキストメニュー
[プロパティー]

左ペン [検証]-[HTML 構文] [プロジェクト固有の設定を可能にする] にチェック
[次の検証問題の重大度レベルを選択:]

要素
[不明なタグ名]-[無視] [無効なタグ名]-[無視]
属性
[未定義の属性名]-[無視] [未定義の属性値]-[無視] [適用して閉じる] [検証設定が変更されました] ダイアログがでるので [はい]
アウトライン
[ウィンドウ]-[ビューの表示]-[その他] [JavaScript]-[Tern Outline] で、専用アウトラインビューが開く。

参考サイト

Java Code Geeks:Eclipse IDE AngularJS Tutorial

Posted by muchag | AngularJS,Eclipse,Library & PlugIn & AddIn |
初回投稿:2017-09-03 (日) 11:21:41 | 最終更新:2018-11-18 (日) 18:59:30

EPP Marketplace Client

Posted by muchag | Eclipse,Library & PlugIn & AddIn |
初回投稿:2017-09-03 (日) 10:35:24 | 最終更新:2017-09-03 (日) 10:35:24

プラグイン配布所のクライアント。

【環境】
Eclipse:Oxygen (4.7)
EPP Marketplace Client:1.5.1.v20160929-1432
OS:Windows10 Pro 64bit
概要

Marketplace もプラグインなんだそうで
Oxygen インストール時には、存在しなかったので
手動で追加。

インストール

2017-09-03 現在
Oxygen 用マーケットプレイス配布ページ は、まだ存在しないようなので
Neon 用マーケットプレイス配布ページ からインストールした。

これによる不具合が起きませんように。。。

Posted by muchag | Eclipse,Library & PlugIn & AddIn |
初回投稿:2017-09-03 (日) 10:35:24 | 最終更新:2017-09-03 (日) 10:35:24

ファイルの関連付け

Posted by muchag | Eclipse |
初回投稿:2016-02-16 (火) 16:53:49 | 最終更新:2018-11-19 (月) 23:19:37

【環境】
Eclipse:Mars.1 (4.5.1) PHP
2017-08-15: Oxson(4.7)PHP
2018-10-01: Photon(4.8)PHP
OS:Windows7 SP1 64bit
手順
[ウィンドウ]-[設定] [一般]-[エディター]-[ファイルの関連付け] ファイルの関連付け
ファイル・タイプを選択。なければ追加
エディターの選択。なければ追加

ただし!
[ウィンドウ]-[設定] [一般]-[コンテンツ・タイプ] に登録済みだと、上記設定を無視する。

事例

CakePHP において、.ctp ファイルを開く際に
ダイアログで関連付けを聞かれた。

多分 HTML でいいか聞かれたんだと思う。

[OK] にしていたら、知らないうちに
[ウィンドウ]-[設定] [一般]-[コンテンツ・タイプ] の [テキスト]-[HTML] にファイル個別に登録されていた。
(Photon(4.8)PHP での話。Oxson では、UI が異なる)

「ファイルの関連付け」から当該ファイル群を削除したら
[ウィンドウ]-[設定] [一般]-[エディター]-[ファイルの関連付け] こちらで設定した、PHP コンテンツファイルの設定が反映された。

案件毎設定内容
[ウィンドウ]-[設定] 左ペイン [一般]-[コンテンツ・タイプ] 右ペイン [テキスト]-[(対象コンテンツ・タイプ)] [追加] 「コンテンツ・タイプの関連付けを追加」
コンテンツ・タイプ:(対象拡張子)

CakePHP3

右ペイン [テキスト]-[PHP コンテンツ・タイプ] ↓
コンテンツ・タイプ:.ctp

Vue.js

右ペイン [テキスト]-[HTML] ↓
コンテンツ・タイプ:.vue

Posted by muchag | Eclipse |
初回投稿:2016-02-16 (火) 16:53:49 | 最終更新:2018-11-19 (月) 23:19:37

デバッグ -> ブレークポイントで止めると、再開時エラーになる

Posted by muchag | Eclipse |
初回投稿:2016-01-07 (木) 19:02:09 | 最終更新:2016-01-07 (木) 19:14:17

【環境】
Eclipse:Mars.1 (4.5.1) PHP
症状

あるとき、突然デバッグ中に例外が発生するようになった。

ブレークポイントで止めて、再開させるとすぐ例外になる。
ブレークポイントの位置を変更しても変わらず。

エラー内容

「未定義のメソッドを使ってるよ~」だそうです。

PHP Fatal error: Uncaught exception ‘sfException’ with message ‘Call to undefined method opPcFrontWebController::getOption.’ in …

Call to undefined method searchActions::getOption.

原因

Eclipse [デバッグ] パースペクティブの [式] ビューに
$this->getOption(); を登録してあったこと。

解決

上記ウォッチ式を削除する。

試行錯誤

最初は真剣にエラー文言の通り、メソッドが足りないのかと
エラー文言で Google 先生へお伺いを立てた。

でも、な~んもなし。

それで、ふと思いつき、エラートレースの中の xdebug://debug-eval で検索したら
stack overflow:Call to a member function getAction() on a non-object
を見つけた。

中を読むと、ウォッチリストを全部削除したら直った、と書いてあったので
ウォッチリストを見てみると、$this->getOption(); なんていう式が・・・。

なるほど、これの getOption か。。。
チャンチャン。

Posted by muchag | Eclipse |
初回投稿:2016-01-07 (木) 19:02:09 | 最終更新:2016-01-07 (木) 19:14:17

YEdit

Posted by muchag | Eclipse,Library & PlugIn & AddIn |
初回投稿:2016-01-06 (水) 17:38:42 | 最終更新:2016-05-28 (土) 14:06:28

テーマを「ダーク」にしているせいか
YAML ファイル内容がグレー一色で暗いので、
こちらを試してみた。
GitHub:YEdit

【環境】
Eclipse:Mars.1 (4.5.1) PHP
OS:Windows7 SP1 64bit
インストール
  1. [ヘルプ]-[Eclipse マーケットプレース]
  2. Eclipse マーケットプレース
    1. 検索窓で「YEdit」
    2. [インストール]
  3. 選択されたフィーチャーの確認
    1. [確認]
  4. ライセンスのレビュー
    1. [使用条件の条項に同意します] を選択
    2. [完了]
関連付け
  1. [ウインドウ]-[設定]
  2. 左ペイン:[一般]-[エディター]-[ファイルの関連付け]
    1. ファイルの関連付け
      1. ファイルタイプ
        1. 選択。なければ [追加]
      2. 関連付けられたエディター
        1. 選択。なければ [追加]
    2. [OK]
書式設定
  1. [ウインドウ]-[設定]
  2. 左ペイン:[YEdit Preferences]-[「色」設定]
メモ
  • コメント:RGB(98, 98, 98)
  • キー:RGB(167, 236, 33)
  • Scalars:RGB(232, 198, 163)
  • 定数:RGB(167, 236, 33)、太字
  • アンカー:未設定
  • エイリアス:未設定
  • タグ:未設定
  • 文書:未設定
  • デフォルト:未設定
Posted by muchag | Eclipse,Library & PlugIn & AddIn |
初回投稿:2016-01-06 (水) 17:38:42 | 最終更新:2016-05-28 (土) 14:06:28

eclipse.ini

Posted by muchag | Eclipse |
初回投稿:2015-12-31 (木) 14:52:08 | 最終更新:2019-03-25 (月) 12:17:12

【環境】
Eclipse:Mars.1 (4.5.1) PHP
->2019-03 (4.11) PHP
OS:Windows7 SP1 64bit
ファイル内容
pleiades\eclipse\eclipse.ini

-product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
512M
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms256m
-Xmx1g
-Xverify:none
-javaagent:dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
メモリ

Eclipse2019-03 (4.11) PHP
4.8 からだったと思うけど

eclipse.ini

から、メモリ使用量の記述が消えている。


-Xms2g
-Xmx4g

今回はこのように追記してみた。

Eclipse フッタのヒープ・サイズを見る限り
追記でちゃんと反映されているっぽい。

EclipseMars.1 (4.5.1) PHP


-Xms256m → 1g
-Xmx1g → 2g

としてみた。

Posted by muchag | Eclipse |
初回投稿:2015-12-31 (木) 14:52:08 | 最終更新:2019-03-25 (月) 12:17:12

“ワークスペースをビルド中” 中に内部エラーが発生しました。

Posted by muchag | Eclipse |
初回投稿:2015-12-20 (日) 13:13:54 | 最終更新:2018-02-17 (土) 16:17:59

【環境】
Eclipse:Mars.1 (4.5.1)
症状

発生したタイミング不明。

“ワークスペースをビルド中” 中に内部エラーが発生しました。
org.eclipse.objectteams.otdt.internal.migration.OTJProjectMigration cannot be cast to org.eclipse.objectteams.otdt.internal.compiler.adaptor.ProblemCleaner
原因

不明。

エラー文言が抽象的すぎて、検索不能。

解決
eclipse.exe

と同じ階層にある

eclipse.exe -clean.cmd

をダブルクリックして、クリーン起動することで
エラーが出なくなった。

Posted by muchag | Eclipse |
初回投稿:2015-12-20 (日) 13:13:54 | 最終更新:2018-02-17 (土) 16:17:59

同期化(差分を見る)

Posted by muchag | Eclipse,Git |
初回投稿:2015-12-18 (金) 16:13:33 | 最終更新:2015-12-18 (金) 16:20:35

【環境】
Eclipse: Mars.1 (4.5.1) PHP
手法
同期化パースペクティブを開くまで

いきなり [チーム同期化] パースペクティブを開くと、
[データ読み込み] か [同期化] か選べ!
と言われて、困ったw

Git
  1. [Git リポジトリー] ビュー
  2. 当該プロジェクトを開く
  3. [ブランチ] を開く
  4. [ローカル] または [リモート・トラッキング] を開く
  5. 当該ブランチのコンテキストメニューから [ワークスペースと同期化] をクリック
  6. 「[チーム同期化] パースペクティブを開くよ」というダイアログが出るので [はい]
  7. [チーム同期化] パースペクティブが開く
同期化パースペクティブ
ローカルブランチから開いた場合

この場合は、ローカルリポジトリと編集中ファイルの差分を見ることになる。

差分のあるファイルがプロジェクトツリーとして表示されているので
目的のファイルをダブルクリックすれば、差分用の左右に並んだビューが開く。

リモート・トラッキングブランチから開いた場合

この場合は、リモートリポジトリ、ローカルリポジトリ、編集中ファイルの三者の差分を同時に見ることになる。
未試行。

三者同時なので、場合分けをされてツリー表示されるみたい。
この先は試していないので、参考サイト参照。

参考サイト

kakiro-web:EclipseでGitをクライアント用途として使用(EGit)(その2)

Posted by muchag | Eclipse,Git |
初回投稿:2015-12-18 (金) 16:13:33 | 最終更新:2015-12-18 (金) 16:20:35

ビュー -> タスク(Tasks)

Posted by muchag | Eclipse |
初回投稿:2015-12-18 (金) 13:22:06 | 最終更新:2015-12-18 (金) 13:22:06

【環境】
Eclipse: Mars.1 (4.5.1) PHP
新規ビュー

問題ビューと同様なので、そちらを参照。
問題(Problems)

内容の構成

問題ビューと同様なので、そちらを参照。
問題(Problems)

Posted by muchag | Eclipse |
初回投稿:2015-12-18 (金) 13:22:06 | 最終更新:2015-12-18 (金) 13:22:06
« 前ページへ次ページへ »