In this article we will be discussing how we can create a Generic Data Access 
Layer which we could use in developing our Business Applications.
Lets start by creating a Data Model.
Create a ADO.NET Entity Data Model as shown below :
![GDAccLyr1.gif]()
Once the Data Model is added to my project, I can then move to the next step, Creating a Repository.
Creating a Repository Class 
public
class Repository<T>
where T : 
EntityObject
    {
        IObjectSet<T> _objectSet;
       
/// 
<summary>
        /// 
This method is used to pass the Context object as a parameter to the Respository
        ///
</summary>
        ///
<param name="objectContext"></param>
        public Repository(ObjectContext 
objectContext)
        {
                _objectSet = objectContext.CreateObjectSet<T>();
        }
       
/// 
<summary>
        /// 
This method we manually pass the Context Object
        /// 
        ///
</summary>
        public Repository()
        {
            DataEntities context =
new DataEntities 
();
            _objectSet =  context.CreateObjectSet<T>();
        }
       
public IQueryable<T> 
AsQueryable()
        {
            return _objectSet;
        }
       
public IEnumerable<T> 
GetAll()
        {
            return _objectSet.ToList();
        }
       
public IEnumerable<T> 
Find(Expression<Func<T,
bool>> where)
        {
            return _objectSet.Where(where);
        }
       
public T Single(Expression<Func<T,
bool>> where)
        {
            return _objectSet.Single(where);
        }
       
public T First(Expression<Func<T,
bool>> where)
        {
            return _objectSet.First(where);
        }
       
public void 
Delete(T entity)
        {
            _objectSet.DeleteObject(entity);
        }
       
public void 
Add(T entity)
        {
            _objectSet.AddObject(entity);
        }
       
public void 
Attach(T entity)
        {
            _objectSet.Attach(entity);
        }
    }
I can now use this Repository Class in a Client Project and easily access or 
modify the Entities using the Above methods.
The client code would look like below :
Repository<Company> 
company = new 
Repository<Company>();
           
foreach (Company 
comp in company.GetAll())
            {
                Console.WriteLine(comp.Name);
            }
            Console.ReadLine();
Note that here I am not using the context object at all to get the entities as I 
have already taken care of that in the below code in Repository Class .
/// 
<summary>
/// This method we manually pass the Context 
Object
/// 
/// 
</summary>
public Repository()
{
    DataEntities context =
new DataEntities 
();
    _objectSet =  context.CreateObjectSet<T>();
}
Thanks . In my next post we will look into how we can improve on this Data 
access Layer which we have just created.