2012-01-11 65 views
3

我正在開發一個MVC3項目,我們正在開發一個站點供多家公司使用。每家公司都有自己的數據庫目錄。站點登錄信息全部存儲在單個「主」數據庫中,該數據庫包含用於每個用戶的目錄名稱。但是,這些目錄與其他結構明顯不同。我想要做的是設置標準模型,但根據用戶的目錄將數據綁定到這些模型。沒有Web.Config連接字符串的MVC3模型

public class UserSearchEntityLayer 
{ 
    public class SearchOptionsList 
    { 
     public virtual string SearchOptionText { get; set; } 
     public virtual string SearchOptionValue { get; set; } 
    } 
} 


public class UserSearchDBLayer : UserSearchEntityLayer 
{ 
    DbSet<SearchOptionsList> SearchOptions { get; set; } 

    public UserSearchDBLayer(string ClientCode) 
    { 
     //Connection Strings 
     var ClientConn = "Data Source=HelloWorld;Initial Catalog=" + ClientCode + ";Integrated Security=True;Persist Security Info=True"; 

     //Prep Work 
     DataSet SearchOptionsDS = new DataSet(); 
     SqlConnection cn = null; 
     SqlDataAdapter cmd = null; 
     SqlDataReader dr = null; 
     string SQLSelect = string.Empty; 

     //Start Work 
     try 
     { 
      cn = new SqlConnection(ClientConn); 
      cn.Open(); 
      switch (ClientCode) 
      { 
       case "AAG": 
        //SearchOptions 
        SQLSelect = "SELECT [Report_Level] as 'Value',[Report_Level_Name] as 'Text' FROM [MASTER_REPORTING_LEVELS] Order By 'Value' DESC"; 
        cmd = new SqlDataAdapter(SQLSelect, cn); 
        cmd.Fill(SearchOptionsDS); 
        if (SearchOptionsDS.Tables.Count != 0) 
        { 
         if (SearchOptionsDS.Tables[0].Rows.Count > 0) 
         { 
          foreach (DataRow R in SearchOptionsDS.Tables[0].Rows) 
          { 
           SearchOptions.Add(new SearchOptionsList { SearchOptionText = R["Text"].ToString(), SearchOptionValue = R["Value"].ToString() }); 
          } 
         } 
        } 
        SQLSelect = string.Empty; 
        SearchOptionsDS.Dispose(); 
        cmd.Dispose(); 
        break; 
       default: 
        //Do more stuff here 
        break; 
      } 
     } 
     catch 
     { 
     } 
     finally 
     { 
    SearchOptions.Add(new SearchOptionsList { SearchOptionText = "States", SearchOptionValue = "States" }); 
      SearchOptions.Add(new SearchOptionsList { SearchOptionText = "Locations", SearchOptionValue = "Locations" }); 
      SearchOptions.Add(new SearchOptionsList { SearchOptionText = "Levels", SearchOptionValue = "Levels" }); 
      SearchOptions.Add(new SearchOptionsList { SearchOptionText = "Name", SearchOptionValue = "Name" }); 
      if ((dr != null)) 
      { 
       if (!dr.IsClosed) 
        dr.Close(); 
       dr = null; 
      } 
      if (cn != null) 
      { 
       if (cn.State != System.Data.ConnectionState.Closed) 
        cn.Close(); 
       cn.Dispose(); 
       cn = null; 
      } 
      if (cmd != null) 
      { 
       cmd.Dispose(); 
       cmd = null; 
      } 
      if (SQLSelect != null) 
       SQLSelect = null; 
     } 
    } 
} 

要做到這一點,最好的方法是什麼?哦,現在,這是我折騰的對象錯誤,因爲SearchOptions爲null,因爲沒有什麼是在它的我加太..

+0

我看不到任何地方,如果你正在創建一個新的實例的SearchOptions反對使用?添加塊在你準備部分創建SearchOptions的新實例,它不會是空的。 – 2012-01-12 10:29:34

+0

你能用反射嗎? – 2012-01-12 10:50:36

回答

1

終於得到它的工作....這裏是我的解決方案(可能不漂亮,但它的工作原理)。

public class UserSearchDBLayer : UserSearchEntityLayer 
{ 
    public IEnumerable<SearchOptionsList> SearchOptions { get; set; } 

    public UserSearchDBLayer(string ClientCode) 
    { 
     //Connection Strings 
     var ClientConn = "Data Source=HelloWorld;Initial Catalog=" + ClientCode + ";Integrated Security=True;Persist Security Info=True"; 

     //Prep Work 
     DataSet SearchOptionsDS = new DataSet(); 
     SqlConnection cn = null; 
     SqlDataAdapter cmd = null; 
     SqlDataReader dr = null; 
     string SQLSelect = string.Empty; 
     //Start Work 
     var DataBuilderList = new List<SearchOptionsList>(); 
     try 
     { 
      cn = new SqlConnection(ClientConn); 
      cn.Open(); 
      switch (ClientCode) 
      { 
       case "AAG": 
        //SearchOptions 
        SQLSelect = "SELECT [Report_Level] as 'Value',[Report_Level_Name] as 'Text' FROM [MASTER_REPORTING_LEVELS] Order By 'Value' DESC"; 
        cmd = new SqlDataAdapter(SQLSelect, cn); 
        cmd.Fill(SearchOptionsDS); 
        DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Region", SearchOptionValue = "0" }); 
        if (SearchOptionsDS.Tables.Count != 0) 
        { 
         if (SearchOptionsDS.Tables[0].Rows.Count > 0) 
         { 
          foreach (DataRow R in SearchOptionsDS.Tables[0].Rows) 
          { 
           DataBuilderList.Add(new SearchOptionsList { SearchOptionText = R["Text"].ToString(), SearchOptionValue = R["Value"].ToString() }); 
          } 
         } 
        } 
        DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "States", SearchOptionValue = "States" }); 
        DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Locations", SearchOptionValue = "Locations" }); 
        DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Levels", SearchOptionValue = "Levels" }); 
        DataBuilderList.Add(new SearchOptionsList { SearchOptionText = "Name", SearchOptionValue = "Name" }); 
        SQLSelect = string.Empty; 
        SearchOptionsDS.Dispose(); 
        cmd.Dispose(); 
        break; 
       default: 
        //Cool Stuff 
        break; 
      } 
     } 
     catch 
     { 
     } 
     finally 
     { 
      SearchOptions = DataBuilderList; 
      if ((dr != null)) 
      { 
       if (!dr.IsClosed) 
        dr.Close(); 
       dr = null; 
      } 
      if (cn != null) 
      { 
       if (cn.State != System.Data.ConnectionState.Closed) 
        cn.Close(); 
       cn.Dispose(); 
       cn = null; 
      } 
      if (cmd != null) 
      { 
       cmd.Dispose(); 
       cmd = null; 
      } 
      if (SQLSelect != null) 
       SQLSelect = null; 
     } 
    } 
} 

那麼你的控制器:

public class TestController : Controller 
{ 
    public UserSearchDBLayer model = new UserSearchDBLayer("AAG"); 
    // 
    // GET: /Test/ 

    public ActionResult Index() 
    { 

     return View(model); 
    } 

} 

最後查看:

@model PlayGround.Models.UserSearchDBLayer 

@{ 
Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
<title>Index</title> 
</head> 
<body> 

@Html.ListBox("Test", new SelectList(Model.SearchOptions, "SearchOptionValue", "SearchOptionText"), new { size = "25" }) 

</body> 
</html> 

如果你有一個更好的解決辦法,我所有的耳朵...或者眼睛在這種情況下。

相關問題