【发布时间】:2021-10-09 19:04:50
【问题描述】:
我有一个静态方法列表,它们基本上都做同样的事情,只是在不同的表/实体类上:
public static List<FormFieldHistoryViewModel> GetTextLabelHistory(Guid entryId, int? formFieldId)
{
List<FormFieldHistoryViewModel> history = new List<FormFieldHistoryViewModel>();
List<dbo_FormFieldsFileValues_CT> fields = new List<dbo_FormFieldsFileValues_CT>();
using (var ctx = new Entities())
{
fields = ctx.dbo_FormFieldsFileValues_CT.Where(f => f.FormFieldsID == formFieldId && f.EntryID == entryId).ToList();
}
foreach (var row in fields)
{
var ffhvm = new FormFieldHistoryViewModel();
ffhvm.DateEdited = row.DateEdited;
ffhvm.EditedBy = row.EditedBy;
ffhvm.Value = row.FileName;
history.Add(ffhvm);
}
return history;
}
我不想为每个表/实体对象使用一个方法,而是只传递对该类的引用作为参数,以便在您看到 edmxobject 的每个地方使用。我怎样才能做到这一点?
public static List<FormFieldHistoryViewModel> GetTextLabelHistory(Guid entryId, int? formFieldId, type edmxobject)
{
List<FormFieldHistoryViewModel> history = new List<FormFieldHistoryViewModel>();
List<edmxobject> fields = new List<edmxobject>();
using (var ctx = new Entities())
{
fields = ctx.edmxobject.Where(f => f.FormFieldsID == formFieldId && f.EntryID == entryId).ToList();
}
foreach (var row in fields)
{
var ffhvm = new FormFieldHistoryViewModel();
ffhvm.DateEdited = row.DateEdited;
ffhvm.EditedBy = row.EditedBy;
ffhvm.Value = row.FileName;
history.Add(ffhvm);
}
return history;
}
}
【问题讨论】:
-
你应该可以使用
传入类型参数,即。 GetTextLabelHistory<T>(...)我相信在上下文中您可以通过Set(T)设置您正在操作的类型。 DbContext.Set(Type) -
查看泛型:GetTextLabelHistory
(Guid entryId, int? formFieldId) where T : class。然后你必须得到那个 T 对象的类型
标签: c# asp.net asp.net-mvc entity-framework