2012-09-13 52 views
1

我正在使用共享數據庫解決方案,我只能訪問一個數據庫。我怎樣才能讓我的MVC應用程序只使用這個1數據庫的所有數據?這可能嗎?只有1個數據庫的ASP.net MVC 4?

+0

有什麼選擇? – muratgu

+0

替代方案是我找到一個解決方案,將允許多個數據庫...我是新來的MVC,所以我不知道如果上述是可能的或不。 –

+1

MVC與數據庫有什麼關係?如果你想使用**任意數量的數據庫或者沒有**,它就取決於你。其全部關於您的業務需求。 – Habib

回答

0

對不起,爲新問題,傢伙,並感謝所有的答案!這是對我有用的東西。

首先,有我的DbContext數據模型的樣子......

public class CDBContext : DbContext  
{ 
    public DbSet<tbl1> tbl1{ get; set; } 
    public DbSet<tbl2> tbl2{ get; set; } 
    public DbSet<tbl3> tbl3{ get; set; } 
    public DbSet<tbl4> tbl4{ get; set; } 
} 

然後,有一個示例表模型看起來像

public class tbl1 
{ 
    public int ID { get; set; } 

    public string Var2{ get; set; } 

    public string Var3{ get; set; } 
} 

接下來,我使用 「添加 - >控制器」嚮導,選擇適當的數據模型(tbl1)和適當的上下文(CDBContext)。然後,我可以爲模型tbl2,tbl3和tbl4執行此操作!每個模型都成爲數據庫中的一個表格,而不是使用數據庫的整個表格(這正是我之前所做的)。

它現在似乎工作,再次感謝!

3

MVC不需要運行數據庫。您可以編寫訪問數據庫的所有代碼,以便完全控制它將訪問的數據庫數量。

+1

此外,如果您使用依賴注入遵循存儲庫模式,則可以擁有多個存儲庫,每個存儲庫與不同的數據存儲區交談。 –

+0

是否有一個很好的資源,可以告訴我如何使用MVC與表而不是數據庫? MVC 4 tuts使用每個業務對象的新數據庫,謝謝。 –

+0

如果任何**教程建議您爲每個業務對象創建一個新的數據庫,我會非常驚訝 - 我懷疑您可能誤解了代碼。再看看教程。 – StanK

1

不使用任何Microsoft提供的成員資格,會話和配置文件提供程序,它們創建自己的數據庫,名爲「aspnet」。

(需要在web.config文件中的變化)

除此之外,發臭是正確的,你可以或者說必須自己編寫代碼。
順便說一句,如果它不是Sql-Server數據庫,則可能需要另一個ado.net提供程序,而不是.NET Framework中的一個。

這裏的代碼來訪問數據庫中的一個例子:

protected System.Data.Common.DbProviderFactory m_providerFactory = null; 

protected System.Data.SqlClient.SqlConnectionStringBuilder m_ConnectionString; 



     public System.Data.Common.DbProviderFactory GetFactory() 
     { 
      System.Data.Common.DbProviderFactory providerFactory = null; 
      providerFactory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient"); 
      return providerFactory; 
     } // End Function GetFactory 



public System.Data.IDbConnection GetConnection() 
     { 
      System.Data.SqlClient.SqlConnection sqlc = new System.Data.SqlClient.SqlConnection("ConnectionString"); 

      return sqlc; 
     } // End Function GetConnection 



public System.Data.IDbConnection GetConnection(string strInitialCatalog) 
        { 
            if (string.IsNullOrEmpty(strInitialCatalog)) 
            { 
                return GetConnection(); 
            } 








            System.Data.SqlClient.SqlConnection sqlc = null; 




            lock (this.m_ConnectionString) 
            { 
                string strOrigInitialCatalog = this.m_ConnectionString.InitialCatalog; 
                this.m_ConnectionString.InitialCatalog = strInitialCatalog; 
                sqlc = new System.Data.SqlClient.SqlConnection(this.m_ConnectionString.ConnectionString); 
                this.m_ConnectionString.InitialCatalog = strOrigInitialCatalog; 
                strOrigInitialCatalog = null; 
            } 




            return sqlc; 
        } 




    public override System.Data.IDbCommand CreateCommand() 
    { 
     return CreateCommand(""); 
    } // End Function CreateCommand 


    public override System.Data.IDbCommand CreateCommand(string strSQL) 
    { 
     System.Data.IDbCommand idbc = this.m_providerFactory.CreateCommand(); 
     idbc.CommandText = strSQL; 

     return idbc; 
    } // End Function CreateCommand 




public System.Data.DataTable GetDataTable(System.Data.IDbCommand cmd, string strDb) 
     { 
      System.Data.DataTable dt = new System.Data.DataTable(); 

      using (System.Data.IDbConnection idbc = GetConnection(strDb)) 
      { 

       lock (idbc) 
       { 

        lock (cmd) 
        { 

         try 
         { 
          cmd.Connection = idbc; 

          using (System.Data.Common.DbDataAdapter daQueryTable = this.m_providerFactory.CreateDataAdapter()) 
          { 
           daQueryTable.SelectCommand = (System.Data.Common.DbCommand)cmd; 
           daQueryTable.Fill(dt); 
          } // End Using daQueryTable 



         } // End Try 
         catch (System.Data.Common.DbException ex) 
         { 
          //COR.Debug.MsgBox("Exception executing ExecuteInTransaction: " + ex.Message); 
          Log("cMS_SQL.GetDataTable(System.Data.IDbCommand cmd)", ex, cmd.CommandText); 
         }// End Catch 
         finally 
         { 
          if (idbc != null && idbc.State != System.Data.ConnectionState.Closed) 
           idbc.Close(); 
         } // End Finally 

        } // End lock cmd 

       } // End lock idbc 

      } // End Using idbc 

      return dt; 
     } // End Function GetDataTable 



public override System.Data.DataTable GetDataTable(string strSQL, string strInitialCatalog) 
{ 
    System.Data.DataTable dt = null; 

    using (System.Data.IDbCommand cmd = this.CreateCommand(strSQL)) 
    { 
     dt = GetDataTable(cmd, strInitialCatalog); 
    } // End Using cmd 

    return dt; 
} // End Function GetDataTable 

用法:

GetDataTable("SELECT * FROM T_User", "DB_NAME"); 

和代碼來獲得供應商工廠爲未註冊的供應商:

 public System.Data.Common.DbProviderFactory GetFactory(Type tAssemblyType) 
     { 
      return GetFactory(tAssemblyType.AssemblyQualifiedName); 
     } 


     public virtual System.Data.Common.DbProviderFactory GetFactory(string assemblyType) 
     { 

#if TARGET_JVM // case insensitive GetType is not supported 
      Type type = Type.GetType (assemblyType, false); 
#else 
      Type type = Type.GetType(assemblyType, false, true); 
#endif 
      if (type != null && type.IsSubclassOf(typeof(System.Data.Common.DbProviderFactory))) 
      { 
       // Provider factories are singletons with Instance field having 
       // the sole instance 
       System.Reflection.FieldInfo field = type.GetField("Instance", System.Reflection.BindingFlags.Public | 
               System.Reflection.BindingFlags.Static); 
       if (field != null) 
       { 
        return (System.Data.Common.DbProviderFactory)field.GetValue(null); 
        //return field.GetValue(null) as DbProviderFactory; 
       } 

      } 

      throw new System.Configuration.ConfigurationErrorsException("DataProvider is missing!"); 
      //throw new System.Configuration.ConfigurationException("DataProvider is missing!"); 
     } // End Function GetFactory 

和一個例子(得到postgre工廠):

public System.Data.Common.DbProviderFactory GetFactory() 
     { 
      //AddFactoryClasses(); 
      System.Data.Common.DbProviderFactory providerFactory = null; 
      providerFactory = this.GetFactory(typeof(Npgsql.NpgsqlFactory)); 

      return providerFactory; 
     } // End Function GetFactory 
1

我在這裏猜測,但你是否使用實體框架進行數據訪問,並希望也使用成員資格提供程序,並且無法在與實體框架表相同的數據庫中獲取成員資格模式 - 如果是這樣,嘗試請按照下列步驟操作:

留下您的實體框架(或您已經創建的任何其他數據庫事物的確切位置),然後使用aspnet_regsql.exe指定要創建成員模式的數據庫。

這個工具可以通過命令行或者一個不錯的設置嚮導爲你有效地創建表格。

請參閱本教程http://www.asp.net/web-forms/tutorials/security/membership/creating-the-membership-schema-in-sql-server-vb請特別注意標題爲第2步:將SqlMembershipProvider架構添加到數據庫。

這裏是從上述文章中粘貼了方便的重要位:

步驟2:添加的SqlMembershipProvider模式到數據庫

的SqlMembershipProvider的需要特定的一組表,視圖, 並存儲程序將被安裝在用戶商店數據庫中。 可以使用 aspnet_regsql.exe工具添加這些必需的數據庫對象。該文件位於 %WINDIR%\ Microsoft.Net \ Framework \ v2.0.50727 \文件夾中。

注意:aspnet_regsql.exe工具提供了命令行 功能和圖形用戶界面。圖形界面 更友好,我們將在本教程中討論。 當需要自動添加 SqlMembershipProvider模式時,命令行界面非常有用,例如在構建 腳本或自動化測試場景中。

aspnet_regsql.exe工具用於向指定的SQL Server數據庫添加或刪除ASP.NET 應用程序服務。 ASP.NET 應用程序服務包含SqlMembershipProvider和SqlRoleProvider的模式以及其他ASP.NET 2.0框架的基於SQL的提供程序的模式 。我們需要 到aspnet_regsql.exe的工具提供的兩位信息:

我們是否要添加或刪除應用程序服務,並從中添加或刪除應用程序服務模式 在提示輸入數據庫 數據庫要使用,aspnet_regsql.exe工具會要求我們提供 us以提供數據庫所在的服務器的名稱, 用於連接到數據庫的安全憑證以及數據庫名稱 。如果您使用的是非SQL Server Express Edition,則 應該已經知道此信息,因爲它必須通過連接字符串在通過ASP.NET網頁使用 數據庫時提供的相同信息 。確定服務器和使用 中的SQL Server 2005速成版數據庫時的數據庫名稱,然而,App_Data文件夾有一點涉及。