0

Tenantから継承するクラスがありUserProfileます。タイプごとのテーブル継承を使用しているので、コンテキストクラスは次のようになります。

// 1 DbSet for superclass UserProfile
public DbSet<LetLord.Models.UserProfile> UserProfile { get; set; } 

データアクセスにリポジトリクラスを使用してTenantRepositoryおり、次のパッケージマネージャーコマンドで作成しました。

足場コントローラーテナント-リポジトリ

アプリケーションを実行しようとすると、TenantRepository内のTenantへのすべての参照が次のエラーをスローします...

「MyNamespace.MyContext」には定義「Tenant」が含まれておらず、最初の引数「MyNamespace.MyContext」を受け入れる「Tenant」の拡張子が見つかりませんでした。

...次の参照など:

public IQueryable<Tenant> All
{
    get { return context.Tenant; } // error line here
}

型ごとのテーブル継承を使用する場合はDbSet、基本クラスののみを含める必要があるため、エラーが発生する理由を理解しています。

私のようなシナリオで実装された派生クラスでリポジトリをどのように使用していますか?


編集

.Add()、などを使用すると.Find()、上記はどのように達成され.Remove()ますか?

前述のメソッドについて上記で説明したのと同じエラー:

public Tenant Find(int id)
{
    return context.UserProfile.OfType<Tenant>().Find(id); // error at .Find()
}
4

1 に答える 1

1

これを試して:

public IQueryable<Tenant> All
{
    get { return context.UserProfile.OfType<Tenant>(); }
}

これはテナントのみを返します。

追加、検索、削除などの他の方法の場合:

public Tenant Find(int id)
{
    // a few different options here -- assumes your key property is Id
    return context.UserProfile.OfType<Tenant>().SingleOrDefault(t => t.Id == id);

    // option 2 
    // even though your context does not expose a DbSet<Tenant>, you can still
    // use the Set<TResult>() method to get only tenants this way
    return context.Set<Tenant>().Find(id);
}

public void Add(Tenant tenant)
{
    context.Add(tenant);
}

public void Remove(Tenant tenant)
{
    context.Set<Tenant>().Remove(tenant);
}
于 2013-02-27T14:38:43.807 に答える