3

データベースを備えたレガシーEF4ライブラリがあります-EntityObjectsを使用して最初に生成されたObjectContext。ゆっくりとDbContextの使用に移行したいので、ある程度のガイダンスが必要です。

DbContextのオーバーロードの1つは、既存のObjectContextを取ります。これにより、既存のObjectContextをDbContextでラップし、IDbSetプロパティを介して既存のEntityObjectsを公開できると思いました。残念ながら、DbContextを作成する場合、IDbSetプロパティは作成されず、代わりに次のメッセージとともに例外がスローされます。「型がクラスとして定義され、プリミティブ、ネスト、または汎用ではなく、EntityObjectから継承されていないことを確認してください。 「」

IDbSetでDbContextを使用して、既存のObjectContextとEntityObjectsを公開する方法はありませんか?ObjectContextを使用してDbContextを作成できるが、エンティティ自体を公開できないのは奇妙に思えます。

サンプルコードは次のとおりです。

public class MyDbContext : DbContext
{
    public MyDbContext(MyObjectContext objectContext, bool dbContextOwnsObjectContext)
        : base(objectContext, dbContextOwnsObjectContext)
    {
    }

    public IDbSet<Person> People { get; set; }
}

例外は、DbContextがIDbSetを作成しようとしたことが原因で発生します。Personは、既存のEDMXのEntityObjectです。

4

1 に答える 1

2

お気づきのとおり、edmxが作成した既存のエンティティオブジェクトは使用できません。

リバースエンジニアリングコードファーストの動力工具の使用を検討しましたか?

私はそれらをいくつかのプロジェクトで使用しましたが、データベースにポイントするだけで、同じプロジェクトでモデルが生成され、edmxファイルが削除されます。

于 2012-09-07T17:24:03.640 に答える