2

我正在將舊版ASP.Net代碼更新爲MVC5。已經有一個數據庫連接到應用程序。需要嚮應用程序添加新表,以便設置實體框架CF.將表添加到實體框架後,從SQL查詢到現有表的錯誤對象名稱錯誤

現在我需要從現有的表中獲取數據,所以我創建了模型並使用Fluid API來配置表。現有的表沒有主鍵,所以我創建了一個組合鍵。最後,我將配置添加到數據上下文中。

這破壞了舊的asp.net代碼的Global.asax文件中的一些現有代碼。該代碼是用於從同一個表中獲取一些值的SQL語句。

這裏是我的代碼

數據上下文

public class MyDBContext : DbContext 
{ 
    public DbSet<EtlParameter> EtlParameter { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // add models to Entity Framework 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     ..... 
     modelBuilder.Configurations.Add(new EtlParameterConfiguration<EtlParameter>()); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

示範

public class EtlParameter 
{ 
    public string EtlName { get; set; } 

    public int StepNumber { get; set; } 

    public string ParameterName { get; set; } 

    public string TextValue { get; set; } 

    public int NumericValue { get; set; } 

    public string RecordDescription { get; set; } 
} 

流利的配置

public EtlParameterConfiguration() 
{ 
    ToTable("ETL_PARAMETER", "dbo"); 

    HasKey(u => new { u.EtlName, u.StepNumber, u.ParameterName }); 

    Property(p => p.EtlName).HasColumnName("ETL_NM"); 
    Property(p => p.StepNumber).HasColumnName("STEP_NR"); 
    Property(p => p.ParameterName).HasColumnName("PARAMETER_NM"); 
    Property(p => p.TextValue).HasColumnName("TEXT_VL"); 
    Property(p => p.NumericValue).HasColumnName("NUMERIC_VL").IsOptional(); 
    Property(p => p.RecordDescription).HasColumnName("RECORD_DESC_TX").IsOptional(); 
} 

這是全局文件中所引發錯誤

protected void Session_Start(object sender, EventArgs e) 
{ 
     ...... 
     populated from etl_paramter table. 
     List<ConfigItem> cItems = new List<ConfigItem>(); 

     var connString = System.Configuration.ConfigurationManager.ConnectionStrings["MyDB_ConnectionString1"].ConnectionString; 

     SqlConnection sqlConn = new SqlConnection(connString); 

     //SqlConnection sqlConn = new SqlConnection(Properties.Settings.Default.MyDB_ConnectionString); 
     SqlCommand cmd = new SqlCommand("Select role from operators_llk where [email protected]_nm", sqlConn); 
     SqlCommand cmd2 = new SqlCommand("select TOP 100 PARAMETER_NM,STEP_NR,TEXT_VL,NUMERIC_VL " + 
     "from etl_parameter " + 
     "where ETL_NM = 'mfgtransactions' " + 
     "order by PARAMETER_NM,STEP_NR ", sqlConn); 
     sqlConn.Open(); 
     if (!string.IsNullOrEmpty(Request.ServerVariables["HTTP_NTUSERDOMAINID"])) 
     { 
      var usr = Request.ServerVariables["HTTP_NTUSERDOMAINID"].Replace(":", "\\"); 
      cmd.Parameters.AddWithValue("@user_nm", usr); 
      try 
      { 
       SqlDataReader reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        Session["UserRole"]= reader["role"].ToString().Trim(); 
       } 
       reader.Close(); 
      } 
      catch 
      { 
       sqlConn.Close(); 
       Session.Add("UserRole", usr + " " + Request.ServerVariables["HTTP_NTUSERDOMAINID"] + " " + cmd.CommandText); 
      } 
     } 
     else 
     { 
     #if DEBUG 
      Session.Add("UserRole", "ADMIN"); 
     #else 
      Session.Add("UserRole", "USER"); 
     #endif 
     } 
     //get application settings 
     try 
     { 
      SqlDataReader reader = cmd2.ExecuteReader(); 
      while (reader.Read()) 
      { 
       cItems.Add(new ConfigItem(reader["PARAMETER_NM"].ToString(), 
        int.Parse(reader["STEP_NR"].ToString()), 
        reader["TEXT_VL"].ToString(), 
        reader["NUMERIC_VL"].ToString())); 
      } 
      reader.Close(); 
      Session["Configuration"] = cItems; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      sqlConn.Close(); 
     } 
    } 

是給錯誤的行的部分是最後}。我試圖盡我所能去除任何不必要的線條。我想知道我做了什麼導致了ASP.Net和EF之間的衝突。

+0

嘗試直接在SQL管理工作室中運行查詢。 – 2015-02-23 20:00:39

+0

嗨@SteveGreene我很確定查詢是好的,它在我嘗試更改之前正在工作,並且我從未在Global.asax文件中更改任何內容。但是當我回到辦公室時,我會明天嘗試它 – 2015-02-23 22:27:14

+0

@SteveGreene你是對的我在SQL管理器中遇到了同樣的錯誤。我必須通過遷移對數據庫進行更改而不意識到這一點 – 2015-02-24 09:12:25

回答

0

代碼中的一切都很好。該問題是由於我的遷移中的錯誤導致數據庫損壞。

當我在創建組合鍵後首次運行我的遷移時,我從未使用過-IgnoreChanges標誌。當我意識到這個錯誤時,我回滾了我的遷移,但是我從來沒有檢查過Down遷移中的內容。

重建數據庫並應用我的更改與空遷移後,每件事情都很好。