MVC SQL 连接初始化

MVC SQL connection initialization

我正在处理编辑 SQL 数据库 table 的 MVC 网页。在我的控制器中,我有一个数据库调用来增加一个实体 table。然后,如果成功,则在我的目标 table(不是实体 table)中创建一个新行。 我 运行 遇到的问题是我不断收到以下错误:

The ConnectionString property has not been initialized.

然而,这只会在实体 table 递增之后发生。不知道从哪里开始,所以我希望通过发布一些代码,有人能够帮助我找到我的错误。

所以这是强制性代码:

我的 SQL 连接:

private SqlConnection con;
public BaseRepository()
{
   con = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlServerConnection"].ToString());
}

我的实体Table增量调用:

public int GetNextId()
{
    try
    {
        using (con)
        {

            DynamicParameters dynParam= new DynamicParameters();
            dynParam.Add("@entity_name", "insert_object ");
            con.Open();
            var value = con.Execute(SP_GET_NEW_ID, dynParam, commandType: CommandType.StoredProcedure);
            con.Close();
            return value;

        }
    }
    catch (Exception ex) { throw ex; }
}

最后,这是行插入代码:

public int InsertRowCode(InsertObject ccModel, UserModel appUser)
{
    var value = GetNextId();
    if (value == 1)
    {
        try
        {

            using (con) 
            //this is where the code breaks and jumps the the exception ex in my catch
            {
                con.Open();

                var dP = new DynamicParameters();
                //(add 14 dynamic Parameters here)
                var result = con.Execute(SP_SAVE_CORRECTION_CODES, dP, commandType: CommandType.StoredProcedure);
                con.Close();
                return result;
            }
        }

        catch (Exception ex)
        {
            throw ex;
        }
    }
    else { throw new Exception("Busted"); }
}

非常感谢任何帮助。 TIA

不要使用共享连接对象。

当您退出此区块时:

using (con)
{
    //...
}

该连接对象现在 已处理,不能再使用。不要担心尝试优化您的连接,连接池已经做得很好。在您需要的地方创建您的连接对象,使用它们,并将它们放置在一个狭窄的范围内:

using (var con = new SqlConnection(connectionString))
{
    //...
}

作为旁注,这是多余的:

catch (Exception ex)
{
    throw ex;
}

catch 块没有为您做任何事情,实际上是在删除有关异常的重要信息。完全删除 try/catch。

另一方面,如果您 do 想要在重新抛出异常之前做一些异常,只需单独使用关键字 throw

catch (Exception ex)
{
    // log something, etc.
    throw;
}

这将允许异常继续向上堆栈 未修改,保留实际的错误信息。