联接标识表和数据表 MVC5 EF6



我的数据表是由经过身份验证的用户编写的文章列表。

在索引页面上,我想显示文章列表以及每篇文章的作者的显示名称。 问题是 DisplayName 存储在我的应用程序 DBContext 标识表中,而我的数据存储在 DBContext(服务器上的单独数据库)中。 唯一的 USERID 键位于两个表上,iD 位于标识表上,作者 ID 位于数据表上。 我尝试了不同的tihngs,给出了不同的错误,最常见的是

"指定的 LINQ 表达式包含对与不同上下文关联的查询的引用">

生成该错误的代码如下所示:

var arts = (from a in db.Articles
join uid in iDdb.Users
on a.AuthorID equals uid.Id
select new ArticleVM
{
ID = a.ID,
ArticleTitle = a.ArticleTitle,
ArticleBody = a.ArticleBody.Substring(0, 200),
ArticleCategory = a.ArticleCategory,
DateCreated = a.DateCreated,
AuthorID = uid.DisplayName
}).AsEnumerable();

.db。数据数据库中的项目,IDdb.Users 是用户表(在身份数据库上)。 我可以编写一个 SQL 查询来生成我需要的东西,但是如何将这些数据放入 ViewModel,例如,这个 SQL 查询将提供我需要的东西:

var query = @"select artDB.*, usrDB.DisplayName from Article as artDB inner
join [IGTSIAppUsersTest1].dbo.AspNetUsers as usrDB on 
artDB.AuthorID = usrDB.Id order by artDB.ID Desc";
var arts = db.Database.ExecuteSqlCommand(query);

谁能提出一种仍然有些有效的方法? 我找到了一种方法来使其工作,但它需要大量的代码并且确实损害了性能。

我找到了一种方法来做到这一点。 只要您只查看数据而不更改数据,它就可以工作。 我在这里找到了答案

string query = (@"select a.*, usr.DisplayName as 'DisplayName' from article a
join identitytablename.dbo.AspNetUsers usr on
datatable.Id = a.authorid");
IEnumerable<ArticleIndexVM> results = db.Database.SqlQuery<IndexViewModel>(query);

只要您的 ViemModel 类型和名称与查询表名称和类型的结果匹配,就可以正常工作

此处的方法之一是,您可以对用户和文章使用相同的上下文。如下链接所示。

对我的自定义实体和标识上下文使用相同的数据库?

最新更新