简体   繁体   中英

C# Add DBContext as generic type parameter

In the following class, how can I add the DBContext as a generic type parameter:

public abstract class Repository<T> : IRepository<T> where T : class
{
    private MyDBContext dataContext;
    private readonly IDbSet<T> dbset;

    protected Repository(IDatabaseFactory databaseFactory)
    {
        DatabaseFactory = databaseFactory;
        dbset = DataContext.Set<T>();
    }

    protected IDatabaseFactory DatabaseFactory
    {
        get;
        private set;
    }

    protected MyDBContext DataContext
    {
        get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
    }

    public virtual void Add(T entity)
    {
        dbset.Add(entity);
    }

    public virtual void Update(T entity)
    {
        dbset.Attach(entity);
        dataContext.Entry(entity).State = EntityState.Modified;
    }

    public virtual void Delete(T entity)
    {
        dbset.Remove(entity);
    }
}

Something in the lines of:

public abstract class Repository<C, T> : IRepository<T> where T

Would it work and how would the implementation be?

You mean like this?

public abstract class Repository<TContext, TEntity> : IRepository<TContext, TSet>
    where TContext : DbContext
    where TEntity : class
{
    private TContext context;
    private readonly IDbSet<TEntity>;

    // ...
}

Basically just replace every reference to MyDBContext with TContext .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM