[英]Join Identity Table and Data Table MVC5 EF6
我的数据表是由经过身份验证的用户撰写的文章的列表。
在索引页面上,我想显示文章列表以及每个文章的作者的DisplayName。 问题是DisplayName存储在我的applicationDBContext标识表中,而我的数据存储在DBContext(服务器上的独立数据库)中。 唯一的USERID密钥在两个表上,身份表上的iD和数据表上的作者ID。 我尝试过不同的尝试,给出了不同的错误,最常见的错误是
“指定的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.Articles,而IDdb.Users是身份数据库上的User表。 我可以编写一个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类型和名称与查询表名称和类型的结果匹配,就可以很好地工作
这里的一种方法是,您可以对用户和文章使用相同的上下文。 如下面的链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.