C# 如何使用LINQ To SQL创建通用数据访问对象(DAO)CRUD方法
我不熟悉linqtosql,并尝试为基本的create、Read、Update和Destroy(CRUD)方法创建一个通用数据访问对象(DAO),以便重用代码。我使用下面的代码成功地创建了一个通用方法,该方法将删除任何实体,但我想知道是否有人知道如何创建一个通用方法,该方法将通过所有表上存在的公共Id字段选择任何实体C# 如何使用LINQ To SQL创建通用数据访问对象(DAO)CRUD方法,c#,linq,linq-to-sql,crud,dao,C#,Linq,Linq To Sql,Crud,Dao,我不熟悉linqtosql,并尝试为基本的create、Read、Update和Destroy(CRUD)方法创建一个通用数据访问对象(DAO),以便重用代码。我使用下面的代码成功地创建了一个通用方法,该方法将删除任何实体,但我想知道是否有人知道如何创建一个通用方法,该方法将通过所有表上存在的公共Id字段选择任何实体 /// <summary> /// Generic method that deletes an entity of any type using LI
/// <summary>
/// Generic method that deletes an entity of any type using LINQ
/// </summary>
/// <param name="entity"></param>
/// <returns>bool indicating whether or not operation was successful</returns>
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;
}
}
//
///使用LINQ删除任何类型实体的通用方法
///
///
///bool指示操作是否成功
公共布尔删除实体(对象实体)
{
尝试
{
DomainClassesDataContext db=新的DomainClassesDataContext();
db.GetTable(entity.GetType()).Attach(entity);
db.GetTable(entity.GetType()).DeleteOnSubmit(entity);
db.SubmitChanges();
返回true;
}
捕获(例外情况除外)
{
控制台写入线(例如StackTrace);
返回false;
}
}
我很确定相同的模式也适用于更新和插入,我希望在GenericDAO上有一个通用方法,可以根据实体Id检索任何实体(即客户、发票、工作订单等)。提前感谢您的回复。我想您正在寻找,以下是它的一个简单实现: 首先,您需要创建一个界面
IRepository
,如下所示:
public interface IRepository<T> where T : class
{
void Add(T entity);
void Delete(T entity);
void Update(T entity);
IEnumerable<T> All();
...
}
其中,Customer
是映射到数据库的实体,该数据库在.dbml
中定义。这只是一个开始,有关更多详细信息,请参阅以下内容:
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;
}
}
public class CustomerRepository : Repository<Customer>
{
public ProductRepository()
: base()
{
}
}
Customer newCustomer = new Customer { FistName = "Foo", LastName = "Boo" };
_customerRepository.Add(newCustomer);