Entity framework 实体框架-“;导航属性“;在不同的数据上下文中?

Entity framework 实体框架-“;导航属性“;在不同的数据上下文中?,entity-framework,foreign-keys,datacontext,Entity Framework,Foreign Keys,Datacontext,注意,有人问了一个类似的问题,我觉得没有人回答- 我有一个AccountsDbContext和一个DataDbContext。对于DataDbContext,我创建了一个类: public class Article { public int Id { get; set; } public string Title { get; set; } // Other data properties not shown for brevity. public strin

注意,有人问了一个类似的问题,我觉得没有人回答-

我有一个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
时,这可能会导致空属性,对吗?如果是这样,那么我必须执行另一个查询来获取用户

如果用户需要按作者的角色(例如,
AccountsDbContext
的一部分)搜索文章,这将是一个问题。我必须首先获取所有结果,查询每个结果的用户信息,然后过滤。这看起来相当慢,而且使用分页肯定会浪费计算


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

对于多个上下文,有几种理论。您看到的最大问题是无法在它们之间合并数据

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


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

不幸的是,客户机指定帐户数据库与数据分开,尽管如果我按自己的方式进行,它们都会放在同一个数据库中。那么,我们只能勉强应付较慢的嵌套查询。