2009-04-02 5 views
2

基本的に私はただ1人のユーザーで動作するアプリケーションを持っていますが、私はそれをマルチユーザーにしたいと思います。これには、ユーザーをログインさせ、セッションでユーザーIDを保持し、データベーステーブルにユーザーID列を追加することが含まれます。大したことはありません。DataContext。追加のWHEREを追加できる方法は1つありますか?

私はそれを投げる任意のクエリも

.WHERE(user=>user.id=MYPARAM) 

がそれに追加されますようにログインしているユーザーのためだけのレコードを返すために、私のDBMLを変更したり、それは部分的だ使いたい

すぐに勝利はありますか? .dbmlでこれを指定できる単一の場所?

答えて

1

おそらくラムダ式を動的に作成します。句は、型の式のオブジェクトを受け取り

ザ・>

その後、次を使用して式を作成することができます。

Expression<Func<User,bool>> func = null; 

その後

ParameterExpression xParam = Expression.Parameter(typeof(User), "u"); 

あなたは、バイナリ表現を使用してu.id = "テスト" のための式を作成します。

BinaryExpression uidTest = Expression.Equal(Expression.Property(xParam, "id"), 
                   Expression.Constant("test"); 

、次いで、以下のように式に取り付ける:

func = Expression.Lambda<Func<User, bool>>(uidTest, xParam) 

効果、これはFUNCオブジェクトがU => u.id = "テスト"

ラムダ式にすることができる構築されます明らかに、アプリケーションでいつでも必要な任意の基準にこれを動的に構築することができます。

0

このようなものがあるかどうかわかりません。

存在しない場合は、部分クラスのすべてのテーブルのフィルタ済みプロパティを公開できます。次に、ユーザーIDをデータ・コンテキストのパラメータとして受け取ります。

ダイナミック式と組み合わせて、できるだけ簡単に定義できるようにすることができます。

0

LINQ to SQLを使用してこの機能を実装するのに問題が解決しない場合は、行レベルのセキュリティを使用してデータベースレベルで問題を解決することができます。

USER_ID = SUSER_SNAME()これは、接続がデータベースに行われる前に、動的に各ユーザーの接続プロパティを設定する必要があります

(すなわち、各:基本的に、あなたは、動的な述語を実装ビューで各テーブルをラップすることができデータベースユーザーには特定のSQLユーザー名とパスワードがあります)。これが実行可能な解決策ではない場合は、独自のロジックをインジェクトでき​​るように、L2Sコンテキストの周りにフレームワークを構築することを検討することをお勧めします。さらにインスピレーションを受けたい場合は、ここをクリックしてください:http://www.west-wind.com/WebLog/posts/160237.aspx

関連する問題