0

次のような EFF db モデルがあるとします。

public class DbEFF
    {   
        [Key]
        public long Id { get; set; }
    }

今、私は次のように db クラスから継承しているクラスを作成しています:

public class DbTest:DbEFF
{

    public DbTest(long id)
    {
      Id=id;
    }

  public string someotherproperty1 {get;set;}

}

次に、次のコードを呼び出してデータベースに書き込みます。

var db = new DbEFF();
db.Id = "454545";

var model = new MasterEntities();
model.Table1.Add(db);
model.SaveChanges();

奇妙なことに、列 someotherproperty1 が存在しないという内部例外が発生します。ここで何が欠けていますか?派生クラスのプロパティがこのように公開されているのはなぜですか?

私が得ている例外は次のとおりです。

{"無効な列名 'someotherproperty1'."}

4

1 に答える 1

1

エンティティ フレームワーク コードでは、階層ごとの最初のテーブル (TPH) が既定のマッピングです。

これは、EF が DbTest と DbEFF の両方を同じテーブルにマップすることを意味します。また、Discriminator という列を追加して、特定の行に保存されているオブジェクトの種類 (DbTest または DbEFF) を確認します。

取得したエラーから、データベースが既に存在し、「someotherproperty」を追加する前に作成されたようです。つまり、テーブルには「someotherproperty」列がありません。

これを修正するには、いくつかのオプションがあります。クラスに一致するようにテーブルのスキーマを取得するか、別のマッピング戦略を選択する必要があります。

最も簡単な修正方法は、単にデータベースを削除して、EF に適切なデータベースを作成させることです。

于 2013-11-11T07:16:07.123 に答える