【问题标题】:Linq to SQL Bombing Out on DataContext在 DataContext 上的 Linq to SQL 轰炸
【发布时间】:2015-04-01 00:42:43
【问题描述】:

由于某种原因,我的代码在构建后决定停止工作并且不确定问题是什么。

公共类 clsSaveError {

  public clsSendEmail.clsSendEmail SendEmail = new clsSendEmail.clsSendEmail();
  public clsSettings.clsSEttings Settings = new clsSettings.clsSEttings();
  public clsLinqToSQL.K12DataClassesDataContext dbContext = new clsLinqToSQL.K12DataClassesDataContext();


    public void InsertErrorIntoDatabase(string monsterID, string dbtable, string errormessage, string stacktrace, EventLog log)
    {
        clsLinqToSQL.K12DataClassesDataContext dbContext = new clsLinqToSQL.K12DataClassesDataContext();


          try
          {
              dbContext.tblErrors err = new dbContext.tblErrors();
              err.monsterid = monsterID;
              err.dbtable = dbtable;
              err.errormessage = errormessage;
              err.stacktrace = stacktrace;
              dbContext.tblErrors.Insertonsubmit(err);
              dbContext.SubmitChanges();
          }
          catch (Exception except)
          {
              //write the error to the event log
              log.WriteEntry("ERROR! Unable to write error to database. Here are the details:" + "\n" +
                  "Exception Message: " + except.Message + "\n" +
                  "Exception Stacktrace: " + except.StackTrace + "\n" +
                  "Database Error Details: " + "\n" +
                  "Monster ID: " + monsterID + "\n" +
                  "Database Table: " + "\n" +
                  "Error Message: " + "\n" +
                  "Stacktrace: " + stacktrace);

              SendEmail.SendEmail(Settings.mailport, Settings.mailhost, Settings.mailtimeout, Settings.mailusername, Settings.mailpassword, Settings.mailfrom, Settings.mailto, "Database Error - Unable to update Error Log", "Message: " + except.Message + "\n" + "Stacktrace: " + except.StackTrace);
          }
    }

}

错误是:

'clsSaveError.clsSaveError.dbContext' 是一个“字段”,但用作“类型”

我知道这是一个一般性错误,但我不确定为什么现在会发生。感谢您的输入!

【问题讨论】:

  • 它正在创建表 tblErrors 的新实例,以便我可以将数据保存到数据库中相应的表字段中。在将代码合并到 TFS 并将其从 TFS 中拉出后,它开始发生。该表存在于数据库中。我已经重建了名为 clsSaveError 的项目和相应的 clsLinqToSQL 项目。我也尝试重新连接到数据库并直接从数据库中提取新的表集,一切正常,但错误仍然存​​在。
  • dbContext.tblErrors err = new dbContext.tblErrors();

标签: c# linq-to-sql datacontext


【解决方案1】:

你在这里声明了一个变量:

clsLinqToSQL.K12DataClassesDataContext dbContext = new clsLinqToSQL.K12DataClassesDataContext();

然后尝试在此处使用该变量作为类型:

dbContext.tblErrors err = new dbContext.tblErrors();

如果dbContext 是一个类型的名字,不要用相同的名字声明变量。如果它不是类型的名称,那么我不知道上面的代码行要做什么。

您的类型名称和变量名称完全违反了 C# 约定,使代码难以阅读。例如:

public clsSendEmail.clsSendEmail SendEmail = new clsSendEmail.clsSendEmail();

您的类型名称是小写的,而您的变量是大写的。这与标准约定相反。将cls 添加到每个类型名称没有帮助。

【讨论】:

  • 你明白我想要完成什么吗?你会怎么做呢?此代码适用于项目的其余部分 - 相同的命名约定和所有。我遇到的问题就是这门课。
  • @KyleDenney:看起来你想要完成的是声明一个名为err 的变量,类型为dbContext.tblErrors。但是您已经在该范围内有一个名为dbContext 的变量。这使编译器感到困惑。不要将变量命名为与类型相同的名称。您的命名约定很难区分变量和类型。因此你的困惑。
  • 我正在尝试引用 LINQ to SQL 表 tblError。我知道这样做的唯一方法是创建 LINQ to SQL DataContext 所在的类的实例 - clsLinqToSQL - 该实例名称是 dbContext。我还能如何做到这一点?
  • @KyleDenney:tblErrorsdbContext object 上的属性,还是dbContext type 上的子类型?您的代码(以及您的命名约定)使这一点非常不清楚。如果它是对象的属性,那么您可以在需要的地方直接引用它。您不必创建变量来复制它。我不确定如何解释这一点。变量和变量的类型是两个不同的东西。
  • 是的 tblErrors 是 dbContext 的一个属性。 dbContext 是 LINQ to SQL 的 DataContext 的缩写。
猜你喜欢
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
相关资源
最近更新 更多