読者です 読者をやめる 読者になる 読者になる

IT業界のすみっこ暮らし

ふと気がついたときの記録

Entity Framework : tinyint(1)をsbyteとして扱いたいときの対策

開発 MySQL Entity Framework

www.solution.to

1、Web.confiもしくはApp.configの<connectionString>に"TreatTinyAsBoolean=false"を追加する

ex)

<connectionStrings>
    <add name="DbEntities" connectionString="metadata=res://*/Entities.DbModel.csdl|res://*/Entities.DbModel.ssdl|res://*/Entities.DbModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=servername;user id=user;password=password;Charset=utf8;TreatTinyAsBoolean=false;persistsecurityinfo=True;database=db;" providerName="System.Data.EntityClient" />
</connectionStrings>

2、DBのedmxファイルを修正する。SSDL content部分のboolをtinyintに修正する。また、CSDL content部分のBooleanをSByteに修正する。

今のところ、Web.configの設定だけでさらっと変えてくれる方法はないようで、edmxファイルから対象カラムとモデルの項目の設定を一々修正する必要がある。なお、edmxに変更がある度に(テーブルの追加・更新・削除など)既存の設定も上書きされるため、更新の度に下記設定をしないといけない悪循環…

新しいDBはEntity Frameworkを意識して属性設定を行えば良いが、古いDBだと仕方ない

Visual Studioでedmxファイル修正手順

1、修正するedmxファイルを右クリックする。

2、「Open With…」>「XML (Text) Editor」を選択してファイルを開く。

3、XMLエディターでedmxファイルが開かれる。