2

重複の可能性:
DbContext はフィルター ポリシーを適用できますか?

このコードを見てください、これは私のエンティティの1つです:

class User
{
    ...
    ...
    ...
    public bool IsDeleted { get ; set; }

}

ユーザーを削除したいときは、IsDeleted プロパティを true に設定して更新します。これは私の DbContext です:

class DataContext : DbContext
{
    ...
    ...
    ...
    public DbSet<User> Users { get; set; }

}

ここに質問があります:

new DataContext().Users を使用するだけで、削除されていないオブジェクトを返すように DbContext を変更する方法

私の悪い構文について申し訳ありません。私は英語が初めてです。詳細については、私にコメントしてください

UPDATE1 : DBContext をこのコードに変更しましたが、エラーが発生しました

public DbSet<DT.DTO.User> Users
{
    get
    {
        return this.Set<User>().Where(rec => !rec.IsDeleted)
    }
    set;
 }

エラー : 型 'System.Linq.IQueryable' を 'System.Data.Entity.DbSet' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)

4

1 に答える 1

0

DataContext の上のレイヤーとして、ある種のサービス クラスまたはリポジトリを使用することをお勧めします。同様のことが別のスレッドで説明されています: https://stackoverflow.com/a/5680618/40853

サービスは、データのフィルタリングやページングなどを処理する必要があります。実装は、達成したいものに大きく依存します。

この種の実装の目的の 1 つは、データベース アクセス層 (この場合は EF) への依存を、データベース アクセス用に特別に記述されたコードの外側で最小限に抑えることです。

次のようなものは、データベース内のデータの処理方法を抽象化できます。

public class DatabaseService : IDatabaseService
{
    public IEnumerable<User>  GetUsers(someconditions)
    {
        // someconditions can be any kind of condition to include in the query
        using (var db = new DataContext())
        {
            return db.Users.Where(rec => !rec.IsDeleted
            && someconditions).ToList();
        }
    }

    [...] implement stuff like DeleteUser(guid), UpdateUser(User user))

}
于 2012-07-16T11:39:01.807 に答える