从其他几个类中,我想调用此命令以获取下一个 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。
每次调用NextId
时创建一个新上下文。 不要尝试在调用之间重复使用上下文。 由于连接池(如果未启用,则应确保已启用),创建新上下文的成本并不是特别高。 事实上,在不需要的时候保留上下文可能会占用更多的资源。
此外,请注意此处的竞争条件。 如果你想弄清楚一个新项目的ID是什么,你应该真正避免尝试自己解决这个问题。 只需使用允许数据库为每一行分配自己的唯一值的列类型。 目前,您需要处理在运行此查询之后但在添加新记录之前创建另一条记录的情况(如果确实是你正在执行的操作)。 这很难从数据库本身进行异地管理。
你也应该让你的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;
}
}
不过,更建议在每次调用NextId
方法时创建一个单独的PrenDBContext
:
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;
}
}