1

我们正在设计我们的新产品,其中将包括多租户。它将用 ASP.NET 和 C# 编写,并且可以托管在 Windows Azure 或其他一些云托管解决方案上。

我们一直在研究 MVC 和其他技术,老实说,我们陷入了各种首字母缩略词(MVC、EF、WCF 等)的困境。

我们应用程序的一个特殊要求令人头疼——用户将能够向数据库添加字段,甚至可以创建一个全新的模块。

结果,每个租户将拥有一个与使用该系统的每个其他租户具有不同结构的数据库。我们设想每个租户都将拥有自己的数据库,而不是共享一个数据库。

(将字段等添加到系统将使用 Web 界面完成)。

一切都很好,但是在为 MVC 创建数据模型时出现了问题。根据此链接,以编程方式修改数据模型以将字段添加到表中似乎是不可能的:

在运行时创建 EDM?

这让我们非常头疼。即使我们不使用 MVC,我想我们仍然想创建一个数据模型(可能用于 LINQ to SQL)。

我们正在考虑创建一个包含大量字段的表,当用户想要将字段添加到他的表单时,我们不会在数据库中添加字段,而是在表中分配一个现有字段。不过,我不确定我是否喜欢这个主意。

当然,我们不必使用 MVC 或实体框架,但在我看来,这些是微软将引导我们走向未来发展的技术。

有什么想法吗?我假设我们不是世界上第一个考虑这种用户可定制应用程序想法的人。

4

3 回答 3

0

就在我的脑海中,允许用户更改数据库架构听起来是个坏主意。我认为您缺少抽象层。在我看来,使用数据库来保存描述客户数据格式的数据会更正确。然后,实际数据将作为 xml 保存在文本列中,包括版本信息。此解决方案可能不符合您的需求,但我不知道您的项目的详细信息。所以只要把它当作我的 5 美分。

于 2010-10-07T14:58:22.197 回答
0

在开始查找之前,我会确保您已经充分探索了创建“名称-值对”类型表的选项,如此处所述http://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_nvp在可定制的模式。也不要忘记您将不得不授予您的 sql 帐户更高的权限,以便他们动态创建表。可自定义的模式意味着您的 sql 帐户也需要更高的权限。不建议将这些更高的权限分配给租户帐户,而是分配给可以执行这些任务的单独配置帐户。

同样在投资 EF 之前 - 尝试使用谷歌搜索“不信任的 EF 投票”。它的提出(我相信)主要是对早期版本的反应,但它绝对值得一读。nHibernate 是一个值得研究的替代方案。

于 2010-11-18T03:30:15.013 回答
0

当今大多数现代 SQL 数据库都支持将键/值存储为字段的“jsonb”类型。其他类型(postgres 的 hstor)也存在。忘记 XML,那是昨天,没有应用程序本身实现 XML,除非它用于导入/转换旧数据。

于 2018-10-02T12:26:37.887 回答