C# 从另一个类DBContext调用方法
从其他几个类中,我想调用这个命令来获取下一个id号。如果有10条记录,我希望返回数字11 表1.id=NextId(“表1”)C# 从另一个类DBContext调用方法,c#,methods,dbcontext,C#,Methods,Dbcontext,从其他几个类中,我想调用这个命令来获取下一个id号。如果有10条记录,我希望返回数字11 表1.id=NextId(“表1”) 如果我将公共静态设置为NextId,我将无法使用db 每次调用NextId时创建一个新上下文。不要试图在调用之间重复使用上下文。由于连接池(如果未启用,则应确保已启用)的缘故,创建新上下文的成本并不特别高。事实上,在不需要的情况下保留上下文可能需要更多的资源 此外,在这里要注意比赛条件。如果你想弄清楚一个新项目的ID是什么,你应该避免独自解决这个问题。只需使用一个列类型
如果我将公共静态设置为NextId,我将无法使用db 每次调用
NextId
时创建一个新上下文。不要试图在调用之间重复使用上下文。由于连接池(如果未启用,则应确保已启用)的缘故,创建新上下文的成本并不特别高。事实上,在不需要的情况下保留上下文可能需要更多的资源
此外,在这里要注意比赛条件。如果你想弄清楚一个新项目的ID是什么,你应该避免独自解决这个问题。只需使用一个列类型,它允许DB为每一行分配自己的唯一值。目前,您需要处理在运行此查询之后但在添加新记录之前创建另一条记录的情况(如果确实是这样做的话)。这很难从数据库本身进行异地管理。您还应该将
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;
}
}
你永远不会放弃任何一个连接。
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;
}
}