pravprab
pravprab

Reputation: 2293

can i make DbContext generic?

i am trying to make a small data access framework using EF6. In all examples, i got there are Repository classes for tables in the database.

eg: ProductRepository.cs , CustomerRepository.cs etc.

But ,i want to make it generic

my bdcontext is

public class EFDbContext<T> : DbContext where T : class
{
    public DbSet<T> Entity { get; set; }
}

and IRepository interface

 public interface IRepository<TEntity> where TEntity : class
{
    List<TEntity> FetchAll();
    IQueryable<TEntity> Query { get; }
    void Add(TEntity entity);
    void Delete(TEntity entity);
    void Save();
}

and SqlRepository class

 public class SqlRepository<T> : IRepository<T> where T : class
{
    EFDbContext<T> db;
    public SqlRepository(EFDbContext<T> db)
    {
        this.db = db;
    }

    public IQueryable<T> Query
    {
        get { return db.Entity; }
    }

    public List<T> FetchAll()
    {
        return Query.ToList();
    }

    public void Add(T entity)
    {
        db.Entity.Add(entity);
    }

    public void Delete(T entity)
    {
        db.Entity.Remove(entity);
    }

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

But it is not working properly.

i used two entities :

 public class Product
{
    public int ProductID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Category { set; get; }
    public decimal Price { get; set; }
    public decimal test { get; set; }

}

public class Customer
{
    public int CustomerID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Category { set; get; }
    public decimal Price { get; set; }
    public decimal test { get; set; }

}

but when i use code first feature of EF6 its creating two database named customer and product instead of two tables in same database

is there any mistake in my code? i am very new to EF,

please help..

Thank you

Upvotes: 1

Views: 3123

Answers (1)

Rowan Freeman
Rowan Freeman

Reputation: 16358

You don't need a generic context. The context is an abstraction over the database; you don't want multiple different versions of it.

Your generic repository approach is fine.

Change your DbContext to be not generic and have your generic repository reference the DbContext.

Upvotes: 2

Related Questions