私は最初にEntityFrameworkとCodeを使用しています。これが私の場合を示す簡単な例です。
public class PersonEfModel
{
public int Id { get; set; }
public string Vorname { get; set; }
public string Nachname { get; set; }
}
public class EfContext : DbContext
{
public DbSet<Person> Personen { get; set; }
}
データアクセスの実装から独立するために、リポジトリを使用して抽象化レイヤーを作成しました。
public class Person
{
public int Id { get; set; }
public string Vorname { get; set; }
public string Nachname { get; set; }
}
public interface IGenericRepository<T>
{
int Count { get; }
void Add(T item);
void Delete(T item);
void Update(T item);
T GetData(int id);
IEnumerable<T> GetData();
IEnumerable<T> GetData(int offset, int count);
IEnumerable<T> Find(Expression<Func<T,bool>> predicate);
IEnumerable<T> Find(IEnumerable<Expression<Func<T, bool>>> predicates);
}
Person
PersonEfModel
データベースモデルから完全に独立するには、2つの異なるタイプである必要があります。したがって、Personタイプの汎用リポジトリがありますが、Findメソッドを実装する方法がわかりません。Personに依存せず、PersonEfModelに依存するデータベースに対してのみ式を実行できます。
それで、データベースに対してそれを実行するためにをに変換する方法はありExpression<Func<Person, bool>>
ますExpression<Func<PersonEfModel, bool>>
か、それとも私は間違ったパスにいますか?