|
WebSurferさん、引き続き書き込み頂き、ありがとうございます。
■No90528 (WebSurfer さん) に返信 > ■No90525 (あみい さん) に返信 > >>・コードファーストにおいて、POCOを変更してスキーマ変更処理が走るのは当然。 >>・逆に言えば、コードファーストといえど、POCOに変更がなければスキーマを変更しに行かないはず > > イニシャライザの設定によります。デフォルトのイニシャライザは CreateDatabaseIfNotExists で、 > 読んで字のごとく、データベースが存在しない場合のみ生成します。
このあたりの知識はあります。 CreateDatabaseIfNotExistsにすれば、データベースが(テーブルが)存在しない時しかメタデータの更新 には行かないはず、と考えています。
> 質問者さんのケースで何故エラーになったかは分かりませんが、たぶん、モデルとスキーマに互換性 > が無いからであろうと思います。
そういえばテーブルのCreate文を付けていませんでしたね。
------------------------------------------------------ create table public.コードテーブル ( コード種別 character(6) not null , コード integer not null , コード名称 text not null , primary key (コード種別,コード) ); ------------------------------------------------------
という感じです。
最初の質問に書いたPOCOクラスは
------------------------------------------------------------- public class コードテーブル { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] [Column(Order =0)] public int コード種類 { get; set; } [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] [Column(Order = 1)] public int コード { get; set; } public string コード名称 { get; set; } } -------------------------------------------------------------
です。
ご指摘頂いたように、おそらくCreateTableとPOCOのスキーマが異なると判断されての事象とは思いますが、 ・どこが違うのか?(同じにしか見えない) ・なぜ、.ToList()や.Where()といったリード系のメソッドでスキーマ更新に行こうとするのか? あたりが、どうにも腑に落ちず、気持ち悪いわけです。
「そんなのにこだわらず、おとなしく自動生成使ったら?」というご意見もごもっともとは思いますが、 気になりだすと止まらないわけです。
引き続き、有識者の方も含め、ご意見をお待ちしております。
|