我想从其他几个类中调用此命令来获取下一个id号。如果有10条记录,我想要返回11号。
Table1.id = NextId(" table1");
public class Test
{
private PrenDBContext db = new PrenDBContext();
public NextId(string table)
{
return MaxId = db.Raknare.Where(x => x.Column.Equals(table)).Max(x => x.ID) + 1;
}
}
如果我公开静态 NextId我无法使用 db ..
答案 0 :(得分:1)
每次调用NextId
时创建一个新的上下文。不要尝试重新使用调用之间的上下文。由于连接池(您应该确保已启用,如果不是),创建新上下文并不是特别昂贵。实际上,当不需要上下文时,可能需要更多的资源。
此外,请注意这里的比赛条件。如果你想弄清楚新项目的ID是什么,你应该真的避免尝试自己解决这个问题。只需使用允许DB为每行分配自己唯一值的列类型。目前,您需要处理在运行此查询之后但在添加新记录之前创建另一条记录的情况(如果这确实是您正在做的事情)。这非常非常难以在数据库本身之外进行管理。
答案 1 :(得分:1)
您也应该使PrenDBContext
静态:
public class Test
{
private static PrenDBContext db = new PrenDBContext();
public static NextId(string table)
{
return MaxId = db.Raknare.Where(x => x.Column.Equals(table)).Max(x => x.ID) + 1;
}
}
每次调用PrenDBContext
方法时,建议更多地建议单独的NextId
:
public class Test
{
public static NextId(string table)
{
var db = new PrenDBContext();
return MaxId = db.Raknare.Where(x => x.Column.Equals(table)).Max(x => x.ID) + 1;
}
}