代码改变世界

Repository 模式

2009-07-07 15:15  蜡笔小旧  阅读(985)  评论(0)    收藏  举报
namespace ContactManager.Controllers
{
    /// <summary>
    /// CRUD
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IRepository<T> where T : class {
        IEnumerable<T> FindAll(Func<T, bool> exp);
        void Add(T entity);
        void Delete(T entity);
        void Save();
    }

    public class Repository<T> : IRepository<T> where T : class {
        protected System.Data.Linq.DataContext m_context;
        public Repository(DataContext context) { m_context = context; }

        #region IRepository<T> Members

        public IEnumerable<T> FindAll(Func<T, bool> exp)
        {
            return m_context.GetTable<T>().Where(exp);
        }

        public void Add(T entity)
        {
            m_context.GetTable<T>().InsertOnSubmit(entity);
        }

        public void Delete(T entity)
        {
            m_context.GetTable<T>().DeleteOnSubmit(entity);
        }

        public void Save()
        {
            m_context.SubmitChanges();
        }

        #endregion
    }

    public class ContactRepository : Repository<Contact> {
        public ContactRepository():this(new ContactManagerDataClassesDataContext()) { }
        public ContactRepository(DataContext context) : base(context) { }
    }
}