如何使用LINQ to SQL创建通用数据访问对象(DAO)CRUD方法

我是LINQ to SQL的新手,并尝试为基本的创建,读取,更新和销毁(CRUD)方法创建通用数据访问对象(DAO),以便我可以重用代码。 我成功地创建了一个通用方法,它将使用下面的代码删除任何实体但是,我想知道是否有人知道如何创建一个通用方法,它将通过所有表中存在的公共Id字段选择任何实体。

///  /// Generic method that deletes an entity of any type using LINQ ///  ///  /// bool indicating whether or not operation was successful public bool deleteEntity(Object entity) { try { DomainClassesDataContext db = new DomainClassesDataContext(); db.GetTable(entity.GetType()).Attach(entity); db.GetTable(entity.GetType()).DeleteOnSubmit(entity); db.SubmitChanges(); return true; } catch(Exception ex) { Console.WriteLine(ex.StackTrace); return false; } } 

我很确定相同的模式将适用于更新和插入,并希望在GenericDAO上有一个通用方法,它将根据实体Id检索我任何实体(即Customer,Invoice,WorkOrder等…)。 在此先感谢您的回复。

我认为你正在寻找Repository Pattern ,以下是它的一个简单实现:

首先,您需要创建一个这样的接口IRepository

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

然后:

 public class Repository : IRepository 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 GetTable { get { return _db.GetTable(); } } public IEnumerable All() { return GetTable; } } 

然后 :

 public class CustomerRepository : Repository { public ProductRepository() : base() { } } 

然后你可以有类似的东西:

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

Customer是映射到数据库的实体,在.dbml定义。 这只是一个开始,请参阅以下内容以获取更多详细信息:

  • 在LINQ-to-SQL中实现存储库模式 。
  • LINQ to SQL和Repository Pattern。
  • 在LINQ to SQL中实现IRepository模式 。
  • LINQ to SQL中存储库模式的实现示例。