首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个数据库,单一视图

多个数据库,单一视图
EN

Stack Overflow用户
提问于 2017-06-22 14:56:37
回答 1查看 249关注 0票数 0

我试图创建一个简单的工具,从两个数据库和Active中提取数据。我正在努力解决的问题是简单地将这些数据合并到一个页面上。

我一直在尝试任何我能想到的方法来完成这个任务,但最终的问题是如何填充来自另一个控制器/上下文/模型的数据?

也许我已经想过了,这应该是一个非常简单的任务(编辑:对于在此之前没有花时间遵循MVC的人来说很容易)。我目前的状况:

为了简单起见,我暂时不考虑Active Directory。因此,我有两个控制器、两个视图、两个上下文和每个表的模型。他们分开工作很好。为了简单起见,唯一的共同点是可以使用相同的搜索字符串(员工的唯一标识符)搜索两个数据源。

ConnectionDatabase跟踪有关连接到我们使用的服务的机器的信息,例如用户名、计算机名称等。

InventoryDatabase是一种库存管理工具,人类输入的数据。

这里的关键信息是,在这一点上,我只是试图在一个页面上显示来自这两个数据库的数据。我没有使用联接,也没有试图将数据或与这些数据相关的任何东西关联起来。本质上,如果我只需要从Database1获取视图和从Database2获取视图,并使它们都出现在相同的视图中,那么坦白地说,这就是我所需要的。两个完全独立的实体恰好出现在同一个页面上。

搜索函数允许用户通过数字上的单个符号进行搜索。这个数字存储在两个数据库中,我希望结果是独立的。例如,左列显示来自ConnectionDatabase匹配SSO的所有记录,右边列显示来自InventoryDatabase匹配SSO的所有记录。

代码语言:javascript
运行
复制
ConnectionDatabase 
| - Table1
  |  - ClientName
  |  - SSO
  |  - Other Info

InventoryDatabase
| - Table1
  |  - Serial Number
  |  - SSO

编辑:当创建控制器时,我的理解是将上下文发送给它,因此将其限制为单个上下文。GetConnectionAssets函数工作得很好,因为它使用的当然是ConnectionContext AClient模型。

现在,我想加入InventoryDatabase,它有自己的InventoryDatabaseContext和InventoryDatabaseModel。复制GetConnectionAssets并将其简单地指向InventoryDatabaseContext并不有效,因为整个控制器都专用于ConnectionContext。

为了进一步解释这一点,下面是我的~/Lookup/BySSO控制器:

代码语言:javascript
运行
复制
namespace MyApp.Controllers
{
    public class BySSOController : Controller
    {
        private readonly ConnectionContext _context;

        public BySSOController(ConnectionContext context)
        {
            _context = context;
        }

        public ActionResult PartialView()
        {
            return View();
        }

        public List<AClient> GetConnectionAssets(string SSO)
        {
            var aClients = from a in _context.AClient select a;
            aClients = aClients.Include(a => a.AUserDefined)
                .OrderByDescending(a => a.LastConnectDate);
            if (!String.IsNullOrEmpty(SSO))
            {
                aClients = aClients.Where(a =>     a.AUserDefined.Sso.Equals(SSO))
                    .Include(a => a.AUserDefined);
            }
            return aClients.ToList();
        }

        public PartialViewResult RenderAClients(string SSO)
        {
            return PartialView(GetConnectionAssets(SSO));
        }

}
}

编辑:,我认为更好的描述方法是我正在构建一个仪表板。因此,设想一个事件系统仪表板,它可以在单个页面上显示度量标准、当前打开的票证、关于用户的信息以及可能来自外部源的一些数据。对于代码本身来说,它可能是完全无关的数据。

编辑:既然我很难解释这件事,并且让自己感到沮丧,那么让我把它放在一张图片中吧。我希望这个页面看起来像这样:http://imgur.com/a/tgZju

不过,我想把它放在一个浏览器窗口而不是两个浏览器窗口里。:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-22 16:00:32

有两种方法可以处理这一问题:

  1. 利用视图模型。视图只能使用单个模型,因此最简单的解决方案是创建一个新的类,该类包含您试图处理的两件事的数据。然后,将这个类传递给视图。
  2. 利用视图组件。本质上,这些都是小行动。它们在自己的上下文中运行,因此您可以向不同的数据库发出单独的查询,返回不同的模型和部分视图等。然后,您只需调用主视图上的每个视图组件,让它们执行它们的任务。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44702942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档