我正在尝试创建一个从两个数据库和Active Directory中提取数据的简单工具。我正在努力解决的问题就是将这些数据加入到一个页面中。
我一直在尝试任何我能想到的方法来实现这一目标,但最终归结为如何从另一个控制器/上下文/模型填充数据?
也许我在思考它,这应该是一项非常简单的任务(编辑:对于之前没有花时间跟踪MVC的人来说很容易)。我目前的状态:
为了简单起见,我暂时忽略了Active Directory。所以,我有两个控制器,两个视图,两个上下文和每个表的模型。他们分开工作。为简单起见,唯一的共同点是,可以使用相同的搜索字符串(员工的唯一标识符)搜索数据源。
ConnectionDatabase跟踪有关连接到我们使用的服务的计算机的信息,例如用户名,计算机名等。
InventoryDatabase是一个库存管理工具,是人类输入的数据。
此处的关键信息是,我只是试图在一个页面上显示来自这两个数据库的数据。我没有使用连接,我并没有尝试关联数据,也没有尝试将这些数据关联起来。基本上,如果我可以从Database1中获取View,从Database2中获取View,并使它们都显示在同一个视图中,坦率地说我只需要它。恰好出现在同一页面上的两个完全独立的实体。
搜索功能允许用户通过单点登录号进行搜索。这个数字存储在两个数据库中,我希望结果是分开的。例如,左列显示ConnectionDatabase与SSO匹配的所有记录,右列显示InventoryDatabase与SSO匹配的所有记录。
ConnectionDatabase
| - Table1
| - ClientName
| - SSO
| - Other Info
InventoryDatabase
| - Table1
| - Serial Number
| - SSO
修改 创建控制器时,我理解将上下文发送给它,因此将其限制为单个上下文。 GetConnectionAssets函数完美地运行,因为它当然使用ConnectionContext AClient模型。
现在,我想在InventoryDatabase中投入其拥有自己的InventoryDatabaseContext和InventoryDatabaseModel。由于整个控制器专用于ConnectionContext,因此复制GetConnectionAssets并将其指向InventoryDatabaseContext不起作用。
为了进一步解释这一点,这里是〜/ Lookup / 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
除非我希望它在一个浏览器窗口而不是两个。 :)
答案 0 :(得分:2)
有两种方法可以解决这个问题:
使用视图模型。视图只能使用单个模型,因此最简单的解决方案是创建一个新类,其中包含您尝试使用的两个数据的数据。然后,您将此类传递给您的视图。
利用视图组件。从本质上讲,这些就像迷你行动。它们在自己的上下文中运行,因此您可以向不同的数据库发出单独的查询,返回不同的模型和部分视图等。然后,您只需调用主视图上的每个视图组件并让它们执行它们的操作。