MVC通用存储库过滤

时间:2016-03-31 21:38:09

标签: c# asp.net-mvc entity-framework generics

我有多个Entity Framework类,它们具有一些相同的属性,例如Order,用于设置显示顺序。

示例EF分部类:

[Table("Feature")]
public partial class Feature
{
    public long ID { get; set; }

    public long AppID { get; set; }

    [Required]
    [StringLength(15)]
    public string DisplayMode { get; set; }

    [Required]
    public int Order { get; set; }
}

其他实体类也包含AppID属性。

在我的Repository类中是否可以使用泛型方法来获取由AppID过滤的Order的最高值?

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
    public int NewOrderNumber(long appID)
    {
        int result = 0;

        var count = Context.Set<TEntity>().Count();

        if (count != 0)
        {
            result = (from List in Context.Set<TEntity>()
                      where List.AppID == appID
                      orderby List.Order
                      select List.Order).ToList().LastOrDefault();

            result++;
        }

        return result;
    }
}

正如它的编码一样,TEntity没有AppID属性的概念。

1 个答案:

答案 0 :(得分:5)

添加界面

public interface IAppOrdered
{
   long AppID { get; }
   public int Order { get; }
}

让你的类实现接口

public partial class Feature : IAppOrdered
{
}

然后将一个通用约束添加到存储库类

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, IAppOrdered
{
}

您现在可以从存储库访问AppIdOrder属性。