C# MVC实体框架通用Get Next Int

C# MVC实体框架通用Get Next Int,c#,generics,model-view-controller,entity-framework-6,C#,Generics,Model View Controller,Entity Framework 6,我试图在我的存储库中创建一个泛型函数,以获得名为Order的列中的下一个最高Int。我想我的方法是正确的,但不确定如何实际调用它 namespace MyApp.Data.Models.Core.Repositories { public interface INextOrder { int AppID { get; set; } int Order { get; set; } } } public class Repository&l

我试图在我的存储库中创建一个泛型函数,以获得名为Order的列中的下一个最高Int。我想我的方法是正确的,但不确定如何实际调用它

namespace MyApp.Data.Models.Core.Repositories
{
    public interface INextOrder
    { 
        int AppID { get; set; }
        int Order { get; set; }
    }
}

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class, INextOrder
{
    public int NextFind(TEntity predicate, int 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;
    }
}
名称空间MyApp.Data.Models.Core.Repositories
{
公共接口存储器
{ 
int-AppID{get;set;}
int顺序{get;set;}
}
}
公共类存储库:IRepository,其中tenty:class,inforder
{
公共int-NextFind(TEntity谓词,int-appID)
{
int结果=0;
var count=Context.Set().count();
如果(计数!=0)
{
结果=(来自Context.Set()中的列表)
其中List.AppID==AppID
orderby列表
选择List.Order).ToList().LastOrDefault();
结果++;
}
返回结果;
}
}

编辑:NextFind方法将在Order表中搜索当前最大的Int值,将其递增1,然后返回该值。它的参数必须是要搜索的实体框架实体类,还必须是一个用于筛选的整数值。

是否尝试创建一个扩展方法,以便调用

entity.NextFind(5)

如果是这种情况,您应该将类更新为静态的,那么您的方法应该如下所示


公共静态int-NextFind(此TEntity谓词,int-appID)

您可能试图手动处理我建议您不要使用的订单号,因为这可能会导致问题

例如,如果两个用户(A和B)在很短的时间内使用此方法,他们都将使用与orderID/num相同的int,并且在用户a保存其订单后,用户B在尝试保存其订单时会造成问题,因为他/她将使用与您所查找的相同的orderID/num


为什么不让SQL用一个标识字段来处理这个问题?

顺序仅用于项目的显示顺序。你的观点是正确的,但是在任何给定的时间,每个AppID都有一个以上的用户修改订单的可能性很小。多亏了你的回答,我意识到我考虑得太多了。我的方法定义应该是:public int NextFind(int appID)。不幸的是,在我重新构建解决方案之前,我的修复似乎一直有效。我现在得到一个错误,即没有从类(tenty)到inforder的隐式引用转换。@user3140169,打开另一个关于类定义的问题,肯定会有人给你一些帮助(如果我先找到它,但怀疑它lol,我会的)。