4

Linq-to-SQLクラスによって生成されるすべてのSQLステートメントにデフォルトのwhere句を追加することは可能ですか?

Customerクラスを持つカスタムDataContextがあります。NULLCustomerクラスにはDeleted属性があります。これは、テーブルをクエリするときは常にこれになりたいものです。

たとえば、次のように書くことができます。

List<Customer> customers = db.Customers.ToList<Customer>();

しかし、実際に取得します。

List<Customer> customers = db.Customers.Where(o => o.Deleted == null).ToList<Customer>();

「削除された」データをDBに保持したいのですが、.NETコードで表示する必要はありません。この種のデフォルトは便利なので、すべてのクエリにフィルターを追加することを覚えておく必要はありません。

4

2 に答える 2

4

ActiveCustomersこれを返すという新しいプロパティを追加できます。

public IQueryable<Customer> ActiveCustomers {
    get { return db.Customers.Where(e => e.Deleted == null); }
}

そのプロパティに対するクエリは、追加の条件を指定したり、結果を変更したりできますが、削除されていない顧客からWhere常に開始されます。また、LINQの実行が延期されているため、このステートメントによって追加のクエリが実行されることはありません。

誰もアクセスできないようにする必要がある場合は、次のdb.Customersようにして非表示にすることができます(機能しない可能性があります。実装を確認する必要があります)。

public new IQueryable<Customer> Customers {
    get {
      throw new InvalidOperationException("Use property ActiveCustomers instead.");
    }
}
于 2012-09-21T19:11:18.803 に答える
1

テーブルをdbmlデザイナに追加する代わりに、デフォルトのwhere句を含むビューを追加し、dbmlでビューにCustomerという名前を付けます。

更新、挿入、および削除を許可するには、DBMLデザイナで主キー列を選択し、それらのPrimary Keyプロパティをtrueとしてマークしていることを確認してください。

于 2012-09-21T20:15:02.800 に答える