2012-01-11 62 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> 

如果你有一个更好的解决办法,我所有的耳朵...或者眼睛在这种情况下。

相关问题