我正在使用大约15个表,我正在为这些表创建审计报告。所有这些表都有一个UserId列,该列可以使用最后一个用户进行更改的ID进行更新。我想创建一个存储库方法,允许我传入用于该方法的表实体,然后返回要在审计页面上使用的UserIds列表,而不是允许用户键入他们想要的任何内容审计的UserId搜索字段,我想提供一个下拉列表,其中只包含我传递给方法的表中的userIds。
我在考虑这样的事情:
var ids = _repo.GetUserIds(//table entity here, unsure how to declare in signature);
答案 0 :(得分:1)
您需要创建一个泛型方法,其类型参数表示您的类型实体,并访问相应的DbSet<T>
以从该集合中获取数据。
public int GetUserId<TEntity>()
{
int userId;
using (var cts = new MyDbContext())
{
userId = ctx.DbSet<TEntity>.FirstOrDefault().Select(e => e.UserId);
}
return userId;
}
为了能够包含投影lambda e => e.UserId
,您需要使所有类实现这样的接口:
public interface IUserId
{
public int UserId { get; set; }
}
您的泛型类必须具有相应的类型约束:
public RepoClass<T>
where T:IUserId
{
// Define the generic method here
}