实体框架 - 不同数据环境中的“导航属性”?

时间:2014-01-22 18:09:17

标签: entity-framework foreign-keys datacontext

请注意,有人问过类似的问题,我觉得它没有得到回答 - Entity Framework Code First, Navigation Property between different contexts/databases

我有一个AccountsDbContext和一个DataDbContext。对于DataDbContext,我创建了一个类:

public class Article
{
    public int Id { get; set; }
    public string Title { get; set; }
    // Other data properties not shown for brevity.

    public string UserId { get; set; } // who wrote/owns this article?

    [ForeignKey("UserId")] 
    public virtual IdentityUser User;
    /* I don't think I can do the above because IdentityUser is another context -
       AccountsDbContext.
    */
}

我正在考虑删除外键属性(或者也可能是virtual关键字)。每当访问Article时,这可能会导致null属性,对吗?如果是这样,那么我将不得不执行另一个查询来获取用户。

如果用户需要通过作者角色(例如AccountsDbContext的一部分)搜索文章(例如),这将是一个问题。我必须首先获取所有结果,查询每个结果的用户信息,然后过滤。这似乎相当缓慢,绝对会浪费计算机的分页。

有没有更好的方法来处理这种情况?同样,我们假设我们不能跨数据上下文进行外键修改。

1 个答案:

答案 0 :(得分:1)

在涉及多种情境时,有几种理论。您看到的最大问题是您无法合并它们之间的数据。

我有一个问题是你需要有多个上下文吗?如果没有,我将使用单个上下文,然后问题将得到解决。否则,正如您所说,您必须获得用户列表,然后通过循环访问用户来过滤文章。随着时间的推移,这可能会非常缓慢。

您可能拥有的另一个选项是其中一个上下文中的仅查看模型,然后您可以调用适当的上下文来获取完整的详细信息。维护这可能有点麻烦。