2010-10-07 54 views
1

我們正在設計我們的新產品,其中將包括多租戶。它將用ASP.NET和C#編寫,可能託管在Windows Azure或其他雲託管解決方案上。多租戶和用戶可定義的形式

我們一直在尋找MVC和其他技術和,說實話,我們感到在不同的首字母縮寫(MVC,EF,WCF等等,等等)陷入困境。

我們的應用程序的特定要求導致頭痛 - 用戶將能夠字段添加到數據庫,甚至創造了一個全新的模塊。

其結果是,每個承租人將具有與不同的結構的數據庫,以使用該系統的所有其他租戶。我們設想每個租戶都有自己的數據庫,而不是共享數據庫。

(將字段等添加到系統中將使用Web界面完成)。

一切都很好,但問題出現在爲MVC創建數據模型時。修改數據模型編程方式將字段添加到表似乎是不可能的,根據這個鏈接:

Create EDM during runtime?

這對我們是一個大難題。即使我們不使用MVC,我想我們仍然想創建一個數據模型(可能與LINQ to SQL一起使用)。

我們正在考慮其中具有與場的負載表,和而不是添加字段添加到數據庫中,我們當用戶希望將字段添加到他的形式在表中分配現有字段。不知道我喜歡那個想法。

當然,我們不必使用MVC或實體框架,但在我看來,這些都是那種,微軟將引導我們走向未來發展的技術。

有什麼想法?我假設我們不是世界上第一批考慮用戶可定製應用程序的想法的人。

回答

0

在開始查看可定製的模式之前,我會確保您已經完全探索了創建「名稱 - 值對」類型表的選項,如此處所述http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_nvp 。另外不要忘記,你將不得不向你的sql賬戶授予更高的權限,以便他們能夠即時創建表。 可定製架構意味着您的SQL帳戶也需要更高的權限。將這些更高的權限分配給租戶帳戶不是明智之舉,而是可以執行這些任務的獨立配置帳戶。

還投資精力投入到EF前 - 嘗試使用Google「不信任投票EF」。它被提出(我相信)主要是對早期版本的反應,但它肯定值得一讀。 nHibernate是一個值得研究的選擇。

0

就在我頭頂,聽起來像是一個壞主意,允許用戶更改數據庫模式。我認爲你錯過了一層抽象。在我看來,使用數據庫保存描述客戶數據格式的數據會更加正確。然後,實際數據將以xml形式保存在文本列中,其中包括版本信息。 此解決方案可能不適合您的需求,但我不知道您的項目的細節。所以只要考慮我的5美分。

+0

我得到你來自哪裏 - 允許用戶更改架構是問題的根源。但是,我不認爲將用戶數據存儲爲字段中的xml是一個可行的解決方案 - 您將如何查詢該數據? – Matt 2010-10-07 15:30:58

+0

我們最初的想法是將數據抽象或元數據存儲在xml中,但將數據存儲在sql server中。這導致我們遇到了如何在運行時創建數據模型的問題。 – Matt 2010-10-07 15:32:14

+0

@Matt,我在想,如果你打算使用SqlServer Azure數據存儲,那你可以在這些自定義字段上進行xml查詢。 – 2010-10-08 07:50:40