2016-07-03 56 views
1

如何使用Entity Framework来管理多个模式的单个C#应用程序?或者应该只有一个模式?更好的是,客户数据库还是统一数据库?

我有大约28的客户,我不知道如果我保持每一个与单独的数据库或在一个单一的数据库和统一管理我的信息的客户ID为例子。

我担心数据量会阻碍应用程序的性能。我现在使用SQL Server 2014,每个版本都带有一个系统版本,我们正在发展该系统并希望适合最佳方案。

我相信,通过客户端访问登录控制的单个应用程序,更好地维护给予。

我不知道是否有可能有单独的数据库,因为我有一些客户谁喜欢有在他们的服务器自身架构的安全管理。

如何创建动态获取连接字符串,请求的来源取决于 上下文?

public class ProductRepository { 

public void Add(Product product, int clientId) 
{ 
    //Here the connection string will be set according to the client id you are saving information 
    var context = ContextFactory.GetContext(clientId); 
    context.Products.Add(product); 

} 

} 

或者是否更好地放置在属于该信息的实体客户ID?

public class BaseEntity { 

    public int Id {get;set;} 
    public int Client_Id {get;set} 
} 


public class Products : BaseEntity{ 
    public string Name {get;set;} 
    public double Price {get;set;} 

} 
+0

你是否有经验丰富的DBA谁将主持该应用程序?听起来你对分布式应用程序并不了解,特别是在住房/管理/支持多个客户方面。花费这笔钱并付给专家它将长期为您节省 – MethodMan

+0

数据库这个术语不幸有点含糊不清,我发现人们有时会用它来表示表,模式或整个服务器实例。你能澄清一下吗?你想知道你是否应该把你的客户放在同一张桌子上吗?在相同的模式?或在同一个sql服务器实例? –

+0

抱歉,正确的术语是模式 –

回答

3

每个方面都有优点和缺点,但我更愿意为每个客户端分开数据库实例。这为可能需要的定制提供了更多的灵活性。

例如,如果你曾经对自己将要求您修改数据库的架构工作的请求。如果每个客户端都有一个数据库,这不会是一大块工作。如果你有一个单独的数据库和一个表来租用你的客户端,那么定制的改变会影响所有的客户端,这可能会产生不必要的后果。

但是,由于拥有单独的数据库,您将增加可维护性的开销。理想情况下,您应该为每个客户端(以及它们的版本)保留Schema生成的代码迁移或SQL脚本,理想情况下,您将基线核心功能,而不是使用新表格更改数据库中的核心表添加功能。在管理错误修复时,如果客户端对数据库模式进行了定制更改并且您正在使用新功能修补或仅修复已知错误,则这可能会变得非常复杂。

最后安全更容易管理与每个客户端多个数据库。每个数据库都明确定义安全性。

如果你有1个数据库,然后除非你在实现客户端佃功能,那么错误可能导致数据泄露挑剔。理想情况下,您希望确保您有足够的单元测试来覆盖任何租用的功能。在许多国家,数据泄露可以被严厉对待。例如在英国,对个人数据的数据泄露可能会使您获得超过10万英镑的罚款。

总体而言,我认为这将归结为个人偏好而不是最佳实践。

+0

实际上,相信定制并不是非常平常,每个人都会由同一个应用程序管理。从技术上讲,我们评估了每种方式的优缺点,我希望即使在这种情况下也能达到最佳效果。 –

+0

我不确定是否有最佳做法。微软提供了许多可以在一个数据库上进行租户管理的应用程序。它的实施正确无误。 –

相关问题