3

定番モデルを揃えました。

必要な機能を追加するために dbcontext から継承する基本コンテキスト クラスがあります。

public class MyContext : DbContext
{
    public void MyFeature() {
    }
}

次に、実際のデータ コンテキストがあります。

public class DataContext : MyContext
{
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
}

コントローラーを作成するときに組み込みの scaffolder を使用したいのですが、「サポートされていないコンテキスト タイプ」というエラーが表示されます。機能が追加されたため、継承を変更するには、そのすべてをコメントアウトする必要があります。そして、もちろん機能を単純化しました。実際には非常に多くのものがあるため、データコンテキストに直接追加するのは大変な作業になります。さらに、スキャフォールダーは、データコンテキストが dbcontext であることを確認できるほどスマートでなければなりません。

データコンテキストで足場を使用するにはどうすればよいですか?

4

2 に答える 2

2

コンポジションを使ってみませんか?

それらのオブジェクトに必要ないくつかのメソッドを言うように、あなたの機能が本当に必要な場合、私はそれらのメソッドをと呼ばれる別のクラスに入れますContextDetails-それらの線に沿ったもので、次のようなものがDataContext含まれています:ContextDetails

//Changed MyContext to ContextDetails
public class ContextDetails 
{
    public void MyFeature() 
    {
        //Do something
    }
}

public class DataContext : DbContext
{
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }

    public ContextDetails DbDetails { get; set; }
}

また、ContextDetailsオブジェクトがそれに関する情報を必要とする場合は、メソッドまたはコンストラクターDataContext/DbContextにパスします。DataContext/DbContext

この問題のコンポジションが気に入らない場合は、インターフェイスを使用することをお勧めします。その場合は、http://www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-Cを確認してください。

コンテキストクラスは、System.Data.EntityDbContextを継承する必要があります。これは、エンティティデータをオブジェクトとしてクエリおよび操作するための機能を提供します。

あなたの例で継承が機能しない理由を私が見つけることができた最も良い理由。

編集:

私は私の答えを読んDBDetailsで、最高の名前ではないかもしれないことに気づきましたが、あなたはその考えを理解します。実装を抽出し、それを別のエンティティとして使用します。幸運を!

于 2012-09-20T10:27:37.440 に答える
0

最初にインストールする必要があると思いますentity framework 4.0 。それから間違いなく機能していると思います。これを試してください。

于 2012-09-26T10:40:06.937 に答える