前提・実現したいこと
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#
1using System.ComponentModel.DataAnnotations; 2using System.ComponentModel.DataAnnotations.Schema; 3namespace MyProject.Entity 4{ 5 public class M_USER 6 { 7 /// <summary> 8 /// ユーザID 9 /// </summary> 10 [Key] 11 [Column(TypeName = "NUMBER(3,0)")] ←これがあるとエラー 12 public int USERID { get; set; } 13 14 /// <summary> 15 /// ユーザ名 16 /// </summary> 17 [Required] 18 [StringLength(50)] 19 public string NAME { get; set; } 20 } 21} 22
このようにM_USER
を定義して、MyDbContext
にM_USERs
というDbSetを持たせています。
その状態で、以下のように追加しようとするとエラーになります。
C#
1DbContextOptions<MyDbContext> opt = new DbContextOptionsBuilder<MyDbContext>().UseOracle(connectionStringOracle).Options; 2var context = new MyDbContext(opt); 3 4M_USER muser = new M_USER(); 5muser.Name = "aaaa"; 6context.Add(muser); ←ここでエラーになる 7 8var 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
桁数の指定の正しい方法をご存じの方がいたら、教えていただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/29 06:19
退会済みユーザー
2022/01/29 06:55
2022/01/29 14:26
退会済みユーザー
2022/01/30 00:46
2022/01/31 00:52