前提・実現したいこと
Code FirstでDBを定義し、その中で、数値型のカラムに桁数の指定をしようとしています。
そのうえで、DbContextに持たせたDbSetにデータを追加したり、中身を参照したりしたいです。
発生している問題・エラーメッセージ
DbContextにデータを追加、中身を参照しようとすると以下のエラーが出ます。
また、上記をしようとしているコードが存在する状態でパッケージマネージャーコンソール上でAdd-Migration
、ないしUpdate-Database
をしても同じエラーが出ます。
"Unable to cast object of type 'System.Func`3[System.Byte,System.Byte,System.Boolean]' to type 'System.Func`3[System.Int32,System.Int32,System.Boolean]'."
該当のソースコード
C#
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace MyProject.Entity { public class M_USER { /// <summary> /// ユーザID /// </summary> [Key] [Column(TypeName = "NUMBER(3,0)")] ←これがあるとエラー public int USERID { get; set; } /// <summary> /// ユーザ名 /// </summary> [Required] [StringLength(50)] public string NAME { get; set; } } }
このようにM_USER
を定義して、MyDbContext
にM_USERs
というDbSetを持たせています。
その状態で、以下のように追加しようとするとエラーになります。
C#
DbContextOptions<MyDbContext> opt = new DbContextOptionsBuilder<MyDbContext>().UseOracle(connectionStringOracle).Options; var context = new MyDbContext(opt); M_USER muser = new M_USER(); muser.Name = "aaaa"; context.Add(muser); ←ここでエラーになる var user = context.M_USERs.First(); ←これもエラー
試したこと
まず、[Column(TypeName = "NUMBER(3,0)")]
を消すと処理は通ります。
また、[Column(TypeName = "NUMBER(3,0)")]
の部分を[Range(0,999)]
と書いて範囲を指定しようとしてみました。これだと追加・参照はできたのですが、DB上での型がNUMBER(10,0)
になってしまい、やりたいことは実現できていないようでした。
また、[Column(TypeName = "NUMBER((int)3,0)")]
のような書き方も試してみましたが、これはこれでAdd-Migration時にAn error occurred while accessing the Microsoft.Extensions.Hosting services. Continuing without the application service provider. Error: Unable to cast object of type 'System.Int32' to type 'System.Decimal'.
としてエラーになってしまいました。
補足情報(FW/ツールのバージョンなど)
OS:Windows10
VisualStudio:2022
EFCore:6.0.1
桁数の指定の正しい方法をご存じの方がいたら、教えていただければと思います。
まだ回答がついていません
会員登録して回答してみよう