[英]Implement searching in a generic repository with Linq Expressions
我首先使用Entity Framework和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
必須是兩種不同的類型才能完全獨立於數據庫模型。 所以會有一個類型為Person的通用存儲庫,但我真的不知道如何實現Find方法。 我只能對依賴於PersonEfModel而不是Person的數據庫執行表達式。
那么有沒有辦法將Expression<Func<Person, bool>>
轉換為Expression<Func<PersonEfModel, bool>>
來對數據庫執行它還是我在錯誤的路徑上?
如果您真的遵循域驅動設計,那么您不需要創建2個單獨的對象來表示Person
。 您的Person
類已經是POCO,它代表您自己的代碼中所需的確切實體(您正在使用Code First)。
您只是引入了額外的,完全不必要的復雜性。 每次更改Person
類時,您都需要更改PersonEfModel
類並使存儲庫正常工作,您需要使用某種映射器(AutoMapper)並將Person
映射到PersonEfModel
,這完全沒有必要,因為2很可能是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.