4

次の単純なエンティティがあります。

public class Something{
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public int ID { get; set; }
    public string NAME { get; set; }
    public int STATUS { get; set; }
}

ご覧のとおり、ID をデータベースから生成したくありませんが、手動で入力します。この私の DbContext クラス:

public class MyCEContext : DbContext {
    ...
    public DbSet<Something> Somethings { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        string dbsch = "myce";
        modelBuilder.Entity<Something>().ToTable("SOMETHING", dbsch);
    }
}

ここには特別なことは何もありません。しかし、このコードは失敗します:

            using (MyCEContext ctx = new MyCEContext()) {
                Something t = new Something();
                t.ID= 1;
                t.NAME = "TEST";
                t.STATUS = 100;

                ctx.Somethings.Add(t);
                ctx.SaveChanges();
            }

これはエラーです:

指定された値は 'Edm.Decimal' 型のインスタンスではありません

一般に、EF は常に int 主キー フィールドに値を送信しようとすると、edm.decimal エラーが発生します。

何か助けはありますか?

4

1 に答える 1

4

以前の回答にコメントしたように、より良い解決策を見つけました。奇妙ですが、機能します

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<TestEntity>().ToTable("TESTENTITY", "SCHEMENAME");
            modelBuilder.Entity<TestEntity>().Property(p => p.Id).HasColumnName("ID").HasColumnType("INT");
            modelBuilder.Entity<TestEntity>().Property(p => p.TestDateTime).HasColumnName("TESTDATETIME");
            modelBuilder.Entity<TestEntity>().Property(p => p.TestFloat).HasColumnName("TESTFLOAT");
            modelBuilder.Entity<TestEntity>().Property(p => p.TestInt).HasColumnName("TESTINT");
            modelBuilder.Entity<TestEntity>().Property(p => p.TestString).HasColumnName("TESTSTRING");
        }

TestEntityは次のようになります

public class TestEntity
    {
        public int Id{ get; set; }

        public string TestString { get; set; }

        public int TestInt { get; set; }

        public float TestFloat { get; set; }

        public DateTime TestDateTime { get; set; }
    }
于 2012-05-22T13:20:10.697 に答える