How To Create Generic Data Access Object (DAO) CRUD Methods with LINQ to SQL

后端 未结 1 498
天涯浪人
天涯浪人 2020-12-13 16:20

I am new to LINQ to SQL and attempting to create a generic Data Access Object (DAO) for the basic Create, Read, Update, and Destroy (CRUD) methods so that I can reuse the co

相关标签:
1条回答
  • 2020-12-13 16:39

    I think you are looking for Repository Pattern, the following is a simple implementation of it:

    First you need to create an interface IRepository like this:

    public interface IRepository<T> where T : class
    {
        void Add(T entity);
        void Delete(T entity);
        void Update(T entity);
        IEnumerable<T> All();
        ...
    }
    

    Then:

    public class Repository<T> : IRepository<T>
        where T : class, IEntity
    {
        DataContext _db;
        public Repository()
        {
            _db = new DataContext("Database string connection");
            _db.DeferredLoadingEnabled = false;
        }
        public void Add(T entity)
        {
            if (!Exists(entity))
                GetTable.InsertOnSubmit(entity);
            else
                Update(entity);
            SaveAll();
        }
        public void Delete(T entity)
        {
            GetTable.DeleteOnSubmit(entity);
            SaveAll();
        }
        public void Update(T entity)
        {
            GetTable.Attach(entity, true);
            SaveAll();
        }
        System.Data.Linq.Table<T> GetTable
        {
            get { return _db.GetTable<T>(); }
        }
        public IEnumerable<T> All()
        {
            return GetTable;
        }
    }
    

    Then :

    public class CustomerRepository : Repository<Customer>
    {
        public ProductRepository()
            : base()
        {
        }
    }
    

    Then you can have something like:

    Customer newCustomer = new Customer { FistName = "Foo", LastName = "Boo" };
    _customerRepository.Add(newCustomer);
    

    Where Customer is an entity mapped to your database which is defined in the .dbml. This is just a start, see the following for more details:

    • Implementing Repository Pattern in LINQ-to-SQL.
    • LINQ to SQL and Repository Pattern.
    • Implementing IRepository Pattern in LINQ to SQL.
    • Implementation example of Repository Pattern in LINQ to SQL.
    0 讨论(0)
提交回复
热议问题