多个数据库,单个视图
我正在尝试创建一个从两个数据库和Active Directory中提取数据的简单工具。我正在努力的问题是简单地将这些数据加入到一个页面中。多个数据库,单个视图
我一直在尝试,我能想到的做到这一点的任何方法,但最终它归结为是如何从另一个控制器/上下文/模型填充数据?
也许我思前想,这应该是一个非常简单的任务(编辑:易有人在此之前,没有采取遵循MVC的时候谁)。我现在的状态:
为了简单起见,我会忽略的Active Directory现在。所以,我有两个控制器,两个视图,两个上下文和每个表的模型。他们单独工作很好。为了简单起见,唯一的共同点是两个数据源都可以使用同一个搜索字符串进行搜索,这是一个员工的唯一标识符。
ConnectionDatabase跟踪有关连接到我们使用诸如用户名,计算机名等
InventoryDatabase是库存管理的工具,人类进入数据服务机的信息。
的关键信息在这里是在这一点上,我只是想在一个页面上这两个数据库的显示数据。我没有使用连接,我也没有尝试关联数据,或者按照这些关系。本质上,如果我可以只从数据库1查看数据库和从数据库2查看数据库,并使它们都显示在坦率地说我需要的全部视图中。两个完全分开的实体恰好出现在同一页面上。
搜索功能允许用户通过对号码的单个符号进行搜索。这个数字存储在两个数据库中,我希望结果是分开的。例如,左列显示来自ConnectionDatabase匹配SSO的所有记录,右列显示与InventoryDatabase匹配SSO的所有记录。
ConnectionDatabase
| - Table1
| - ClientName
| - SSO
| - Other Info
InventoryDatabase
| - Table1
| - Serial Number
| - SSO
编辑: 当控制器创建我的理解上下文发送给它的,因此限制了单个上下文。函数GetConnectionAssets完美工作,因为它使用ConnectionContext AClient模型。
现在,我想在InventoryDatabase它有它自己的InventoryDatabaseContext和InventoryDatabaseModel折腾。由于整个控制器专用于ConnectionContext,因此复制GetConnectionAssets并将其简单指向InventoryDatabaseContext不起作用。
在努力进一步解释这一点,这是我的控制器〜/查询/ BySSO:
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
除了我想它是在一个浏览器窗口,而不是两个。 :)
有两种方法可以处理这个问题:
利用视图模型。一个视图只能用于一个模型,所以最简单的解决方案是创建一个新类,其中包含您正在尝试使用的所有内容的数据。然后,您将该类传递给您的视图。使用视图组件。基本上,这些就像迷你动作一样。它们在自己的上下文中运行,因此您可以向不同的数据库发出不同的查询,返回不同的模型和部分视图等。然后,您只需在主视图上调用每个视图组件,并让它们执行它们的操作。
好的,我喜欢2号的想法。它听起来**正是**我在找什么。但是这涉及到完全相同的问题,它告诉我我不了解这个过程的一个简单组件。在我的控制器中,我可以调用ViewComponent并将其传递给我的视图。 ViewComponent(,)。提供组件的数据是问题。我不知道如何从完全不同的环境中获取这些数据。没有与其他组件友好相处的概念,MVC看起来是非常线性的。 – mrUlrik
您可以在控制器中使用任何您喜欢的上下文。你只需将它们新建或注入,但无论你喜欢多少。我真的不明白你有什么具体问题。 –
我相当肯定你回答了这个问题,但我不明白。通过注入,你可能指的是扩展公共BySSOController(ConnectionContext上下文)以包含多个上下文。这在其他地方已向我解释。请原谅我的无知,因为我是一个简单的系统管理员,只是试图创建一个非常需要的工具!谢谢, – mrUlrik
想加入SQL还是C#?如果C#,你想创建一个新的类定义或匿名类型作为结果? –
我不相信我想要加入数据。结果最好是他们自己的实体。我认为我没有正确解释。 ?想象一下〜/ MyViewToIncludeEverything SSO =#有两个I帧,仅仅指向〜/ ConnectionDatabaseView SSO =#和〜/ InventoryDatabaseView SSO =# - ?虽然这工作,它显然不这样做的正确方法。 – mrUlrik