如何在C#中使用泛型和反射实现通用的保存和更新操作?
我使用here...
中的一些引用实现了数据检索我现在没有太多时间学习NHibernate / LINQ / Entity Frameowrk等技术。出于某种原因,我需要快速解决这个问题。
答案 0 :(得分:4)
我认为你最好使用ORM - LINQ to SQL,LINQ to Entities,LINQ to nHibernate - 而不是重新发明所有这些。从本质上讲,您在这些框架/技术中已经为您做过的建议。我的建议是花一些时间了解已经存在的工具,并利用已经开发的平常工作工具,将您的创造力用于为您的应用程序增加价值。当然,除非您正在寻求实施ORM,因为现有的ORM不足以满足您的需求。我怀疑情况并非如此,否则你已经知道如何使用反射来做你想要的事情。
答案 1 :(得分:0)
使用GenericType的DBContext帮助程序
public class ContextHelper<T> : IContextHelper<T>
{
//Instantiate your own EntityFrameWork DB context here,
//Ive called the my EntityFramework Namespace 'EF' and the context is named 'Reporting'
private EF.DataContext DbContext = new EF.DataContext();
public bool Insert<T>(T row) where T : class
{
try
{
DbContext.Set<T>().Add(row);
DbContext.SaveChanges();
return true;
}
catch(Exception ex)
{
return false;
}
}
public bool Update<T>(T row) where T : class
{
try
{
DbContext.Set<T>().AddOrUpdate(row);
DbContext.SaveChanges();
return true;
}
catch (Exception ex)
{
return false;
}
}
public bool Delete<T>(T row) where T : class
{
return Update(row); //Pass an entity with IsActive = false and call update method
}
public bool AddRows<T>(T[] rows) where T : class
{
try
{
DbContext.Set<T>().AddOrUpdate(rows);
return true;
}
catch (Exception ex)
{
return false;
}
}
然后在这里实例化并调用该类
public class MainLogicClassExample //Catty out logi operations on objects and update DataBase
{
public void NewEmailRecipient(EF.EmailRecipient recipient)
{
// logic operation here
EntityToDB(recipient);
}
public void NewReportRecipient(EF.ReportRecipient recipient)
{
// logic operation here
EntityToDB(recipient);
}
public void UpdateEmailRecipient(EF.EmailRecipient recipient)
{
// logic operation here
UpdateEntity(recipient);
}
public void UpdateReportRecipient(EF.ReportRecipient recipient)
{
// logic operation here
UpdateEntity(recipient);
}
// call generic methods to update DB
private void EntityToDB<T>(T entity) where T : class
{
var context = new ContextHelper<T>();
context.Insert(entity);
}
private void UpdateEntity<T>(T entity) where T : class
{
var context = new ContextHelper<T>();
context.Update(entity);
}
}
我在这里向gitHub添加了一个DemoProject: https://github.com/andyf1ynn/EntityFramwork-Generic-Type-DAL