1

Azure MVC アプリで EF4 Code First を使用して、SQL Azure データベースからデータを取得しています。

このアプリには、合計で約 200 人のユーザーがいて、すべて同じアプリを使用している 12 の組織に分かれています。SQL Azure DB には、主にクライアントの連絡先情報などが保存されます。

SQL Azure データベースのすべてのテーブルには、各組織に固有の GUID である OrgansiationId というフィールドが含まれています。保存されたすべてのデータには、データを保存した人の組織に対応する OrganizationId が含まれます。

ユーザーが自分の組織からの情報のみを追加/編集/表示できることが重要です。

したがって、私の質問は、LINQ を使用して Select ステートメントが Users OrganisationId の情報のみを返すようにするための推奨される方法は何ですか? . (つまり、Organsation がフィルタリングされないようにそれを含めるのを忘れている、悪夢のシナリオ!)

おそらく、LINQステートメントを追加のWHEREステートメントでラップして、これがすべてのLINQ Selectステートメントに対して自動的に行われるようにすることで、これを達成する受け入れられた方法はありますか?

4

1 に答える 1

2

非常によく似たアプリを実装しました。ラップされたコンテキストで DbContext を単純にラップしました。

これが元のコンテキストの場合:

public class MyContext : DbContext {
    public DbSet<MyTable> MyTable { get; set; }
}

ラップされたコンテキストは次のようになります。

public class MyWrappedContext {
    protected MyContext InternalContext { get; set; }
    public Guid OrganizationId { get; set; }

    public IQueryable<MyTable> MyTable 
    {
        get 
        { 
            return InternalContext.MyTable
               .Where(t => t.OrganizationId == OrganizationId); 
        } 
    }
}

エンティティを追加、削除、更新するために、WrappedContext に次のメソッドがあります。

public void Add<T>(T entity) where T : class
{
    DbEntityEntry<T> dbEntityEntry = InternalContext.Entry(entity);
    dbEntityEntry.State = EntityState.Added;
}

public void Remove<T>(T entity) where T : class
{
    DbEntityEntry<T> dbEntityEntry = InternalContext.Entry(entity);
    dbEntityEntry.State = EntityState.Deleted;
}

public void Update<T>(T entity) where T : class
{
    DbEntityEntry<T> dbEntityEntry = InternalContext.Entry(entity);
    dbEntityEntry.State = EntityState.Modified;
}
于 2012-11-27T16:00:04.490 に答える