【问题标题】:ASP.NET MVC 3 with already built SQL Server on different databasesASP.NET MVC 3 已经在不同的数据库上构建了 SQL Server
【发布时间】:2011-07-01 13:39:42
【问题描述】:

我正在 C# 中创建一个使用现有 SQL Server 数据库的 ASP.NET MVC3 项目。

SQL Server 有不同的数据库,每个客户都有一个数据库。每个客户数据库都有许多表,但我只对一个表感兴趣。

所以,我有兴趣从每个客户的同一张表中检索(而不是更新或删除)数据。 这是数据库配置示例:
数据库客户名称1
- TableNeeded

数据库客户名称2
- TableNeeded

数据库客户名称N
- 需要餐桌

问题是……如何创建模型?

如果我必须为一个客户做这件事,我会根据表格的字段创建模型,我该如何管理有多个客户的情况?

提前致谢。

阿提拉

【问题讨论】:

    标签: c# database asp.net-mvc-3 scaffolding


    【解决方案1】:

    你应该有一个 Repository 类的接口 例如每个客户数据库的不同实现

        internal interface IProductRepository
    {
        IEnumerable<Product> GetAll();
    }
    
    class ProductRepositoryCustumerOne : IProductRepository
    {
        public IEnumerable<Product> GetAll()
        {
            //code to retrieve data
        }
    }
    
    class ProductRepositoryCustumerTwo : IProductRepository
    {
        public IEnumerable<Product> GetAll()
        {
            //code to retrieve data
        }
    }
    

    在你可以用 IoC 容器注入之后你需要什么实现

    【讨论】:

    • 我看到这是一个非常干净的解决方案,但我需要动态地管理这种情况,他们可以创建一个新客户,我应该处理它而不是每次都为其创建一个新类。有没有办法解决这个问题?
    • 如果你将使用 IoC 容器,Repository 类的对象将被创建为单例,这意味着一次
    【解决方案2】:

    让我澄清一下你的问题,你是说你有 多个客户,每个客户都有一个数据库?

    所以...

    数据库

    • 客户A
    • 客户 B

    对于您所说的每个客户,您都有一个想要访问的表格,因此您有

    • 客户 A > TheTable
    • 客户 B > TheTable

    所以你问,如何创建一个模型,让任何客户都可以访问 TheTable?

    对吗?

    【讨论】:

    • 没错。到目前为止,我创建了“建模”公用表的模型。例如,如何在“摘要”页面中打印所有客户的同一张表的值?按客户订购,(即跟踪数据库名称)
    【解决方案3】:

    如何基于选择链接在所有表上创建一个 Sql 视图:

     Select 'Customer 1' as Customer, c.* from FirstDb.dbo.Cusotmers c
     Union Select 'Customer 2' as Customer, c.* from SecondDb.dbo.Cusotmers c
     Union ...
    

    您可以使用例如处理此视图EF 或 linq to sql。

    【讨论】:

    • 有趣的解决方案,我会询问数据库管理员是否可以创建这种视图。但是如何在视图中跟踪客户来源?这样我只有一个视图,包含所有客户的所有数据,我怎么能有一个由客户订购的视图?
    • 好吧,在本例中,您有一个名为“客户”的列。如果您使用的是 Linq,您可以随意订购:'Customers.OrderBy( c => c.Customer )...'
    【解决方案4】:

    假设您正在使用实体框架是否安全?所有数据库中的架构都相同吗?

    您应该能够针对其中一个数据库创建模型。然后,每当您想选择不同的客户时,您都需要在创建数据上下文之前更改连接字符串中的初始目录(或等效)值。

    目前我手头没有任何代码。这有帮助吗?

    【讨论】:

    • 我正在使用 Linq to Sql,抱歉我忘了提及。所有数据库中的模式都是相同的。问题是我必须在一个页面中显示所有客户的数据,而不是一个一个
    猜你喜欢
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多