我首先使用实体框架和代码。这是一个简单的例子,向您展示我的情况。
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
必须是两种不同的类型才能完全独立于数据库模型。所以会有一个 Person 类型的通用存储库,但我真的不知道如何实现 Find 方法。我只能对依赖于 PersonEfModel 而不是 Person 的数据库执行表达式。
那么有没有办法将 aExpression<Func<Person, bool>>
转换为 aExpression<Func<PersonEfModel, bool>>
以针对数据库执行它,还是我走错了路?