0

私はlinq-to-sqlクラスを持っています。基になる ASP.NET メンバーシップ プロバイダーを呼び出すプロパティ "Password" があります。したがって、このプロパティを直接書き出すのではなく、独自のコードを介して書き出す必要があります。基本的に、このプロパティのファサード/プロキシを作成して、基になるメンバーシップ プロバイダーまたはカスタム ストアド プロシージャを使用できるようにしたいと考えています。

可能であれば、LINQ-TO-SQL デザイナーが生成したコードを変更せずに達成したいと考えています。

4

3 に答える 3

3

可能です。部分クラス メカニズムを使用して、linq で生成されたクラスにプロパティとメソッドを追加できます。Linq で生成されたクラスは部分的とマークされるため、次の方法でクラス メンバーを追加できます。

public partial class YourLinqClass
{
  // your methods and properties. refer linq properites and methods with "this."
  // example:
  public string Password
  {
     get
     {
         int id = this.UserId;
         string password = // ... get password
         return password;
     }
     set
     {
         // ...
     }
  }
}

部分クラスは、残りの dbml と同じ名前空間に配置する必要があります。

于 2010-04-07T20:59:47.150 に答える
0

最良のオプションは、デザイナーからプロパティを削除し、PanJanek で説明されているように、部分クラスのコードに記述することです。

ただし、このようにすると、悪い設計を追求していることになります。レイヤーのカプセル化を破る依存関係をエンティティ クラスに導入しています。エンティティ クラスは、プロバイダーを読み込む DataContext について知っている以上に、プロバイダーについて知っているべきではありません。これらは、データベースに出入りするデータのコンテナー以上のものになることを意図したものではありません。

エンティティ、コンテキスト、ユーザー名プロバイダー、およびその他の必要なサービスをラップする別のクラスを作成し、そのクラスでユーザー名を取得してエンティティに必要な操作を行うことを検討する必要があります。

于 2011-07-25T11:12:32.237 に答える
-3

この状況を処理するカスタム DataContext を作成することは可能かもしれません。

http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx


個々のプロパティの部分メソッドと OnValidate メソッドがあります。

私の場合、プロパティを変更するメソッドで例外をスローし、この個別のプロパティを設定するパブリック メソッドを追加するのが最善の解決策だと思います。このソリューションは完全ではありませんが、プロパティが読み取り専用に設定されたり、セッターが削除されたりする可能性がある SQL 生成コードに触れることを回避します。

他の提案を歓迎します。

于 2010-04-07T20:59:24.147 に答える