从不同表返回公共字段的通用方法

时间:2014-06-03 18:07:33

标签: c# entity-framework

我正在使用大约15个表,我正在为这些表创建审计报告。所有这些表都有一个UserId列,该列可以使用最后一个用户进行更改的ID进行更新。我想创建一个存储库方法,允许我传入用于该方法的表实体,然后返回要在审计页面上使用的UserIds列表,而不是允许用户键入他们想要的任何内容审计的UserId搜索字段,我想提供一个下拉列表,其中只包含我传递给方法的表中的userIds。

我在考虑这样的事情:

var ids = _repo.GetUserIds(//table entity here, unsure how to declare in signature);

1 个答案:

答案 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
}