1

EF 4 を使用してマルチテナント アプリケーションを構築しています。共有データベースがあり、多くのエンティティに CustomerID フィールドがあります。DBContext から DBSet レベルで CustomerID クエリを強制できる方法があるかどうか疑問に思っていました。

DB コンテキストを作成するときに CustomerID を指定し、DBSets をラップして常に (x => x.CustomerID == custID) を含めることを望んでいたので、アプリケーション全体にこのロジックを追加することを心配する必要はありません。 、しかし、その可能性を示唆するものを見つけることができませんでした

どうもありがとう

4

1 に答える 1

1

DbContext の上にあるのサービス レイヤーでこれを行うことを強くお勧めします。そのレベルで実施する方がはるかに簡単だからです。

DbContext レベルで行うことを主張する場合は、必要なことを行うサンプルを次に示します。

class MyContext : DbContext
{
    private readonly int _customerId;

    public MyContext(int customerId)
    {
        _customerId = customerId;
    }

    public DbQuery<MyEntity> MyEntities
    {
        get
        {
            return (DbQuery)Set<MyEntity>().Where(e => e.CustomerId == _customerId);
        }
    }

    protected override OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyEntity>();
    }
}

これに関する大きな問題は、MyEntities から返されたクエリが、他の顧客のエンティティを含めるためにさらに変更されないことを保証できないことです。

于 2012-11-07T23:22:17.880 に答える