在通用存储库模式中通过外键获取多个结果

时间:2015-07-27 19:48:11

标签: c# asp.net-mvc repository-pattern

我试图从我的数据库中获取多个搜索外键的结果(至少在这种情况下),而不是主键。例如,我有一个用户,这个用户有很多标识。用户显然是独一无二的,而他可以在他下面有多个标识。使用通用存储库模式,我不知道如何搜索不是主键的密钥,在这种情况下是外键。这是我的通用存储库:

public class GenericRepository<T1, T2>:IGenericRepository<T1> 
    where T1 : class
    where T2: class

{
    private Data.Entities db = null;
    private DbSet<T2> table = null;

    public GenericRepository()
    {
        this.db = new Data.Entities();
        table = db.Set<T2>();
    }

    public GenericRepository(Entities db)
    {
        this.db = db;
        table = db.Set<T2>();
    }

    public IQueryable<T1> SelectAll()
    {
        return table.ToList().AsQueryable().Select(x => Mapper.Map<T2, T1>(x));
    }

    public T1 SelectByID(object id)
    {
        return Mapper.Map<T2, T1>(table.Find(id));
    }

    public void Insert(T1 obj)
    {
        T2 item = Mapper.Map<T1, T2>(obj);
        table.Add(item);
    }

    public void Update(T1 obj)
    {
        T2 item = Mapper.Map<T1, T2>(obj);
        table.Attach(item);
        db.Entry(item).State = EntityState.Modified;
    }

    public void Delete(object id)
    {
        T2 existing = table.Find(id);
        table.Remove(existing);
    }

    public void Save()
    {
        db.SaveChanges();
    }

在这种情况下,我使用AutoMapper将我的实体映射到ViewModels和Vice Versa。不过,我基本上需要创建一个SelectAllByForeignKey()或者其他东西,但我绝对不知道如何在通用模式中执行此操作。任何想法都会很棒。

0 个答案:

没有答案