在我的代码中,我使用相同的方法一遍又一遍地将大量的类保存到数据库中。所以我试着抽象它,如下所示:
public long Save<T>(BaseViewInterface<T> view, AppsRTSEntities dbContext)
{
try
{
if (view.IsNew())
{
return Create(view, dbContext);
}
else
{
T tmp = view.ToPersistent(dbContext);
dbContext.T.Attach(tmp);
dbContext.Entry(tmp).State = System.Data.Entity.EntityState.Modified;
dbContext.SaveChanges();
return tmp.ID;
}
}
catch (DbEntityValidationException exc)
{
throw new DbEntityValidationException(GetExceptionMsg(exc), exc);
}
catch (DbUpdateException exc)
{
throw new DbEntityValidationException(GetExceptionMsg(exc), exc);
}
}
T
是Microsoft创建的自动生成的分部类。所以例如我的观点是
public class MyView : BaseViewInterface<My>
我将是作为db上下文的一部分创建的自动生成的类。所以我的问题很简单。我在这做错了什么?如何进行这种通用的保存工作?
修改:我无法修改AppsRTSEntities
以包含T
的定义,因为它也是自动生成的。{1}}
答案 0 :(得分:2)
执行dbContext.T.Attach(tmp);
时,您需要使用DbContext.Set<T>()
方法来获取通用DbSet
数据类型。
else
{
T tmp = view.ToPersistent(dbContext);
//Could also do "dbCondext.Set<T>().Attach(tmp);" but I split it for this example
DbSet<T> t = dbCondext.Set<T>();
t.Attach(tmp);
dbContext.Entry(tmp).State = System.Data.Entity.EntityState.Modified;
dbContext.SaveChanges();
return tmp.ID;
}