【发布时间】:2018-01-18 05:05:43
【问题描述】:
我的数据表是经过身份验证的用户撰写的文章列表。
在索引页面上,我想显示文章列表以及每篇文章的作者的 DisplayName。问题是 DisplayName 存储在我的 applicationDBContext 身份表中,而我的 Data 存储在 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();
data 数据库上的 Data 表中的 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);
任何人都可以提出一种仍然有效的方法吗?我找到了一种让它工作的方法,但它需要大量的代码并且真的会损害性能。
【问题讨论】:
-
可能最简单的做法是在“文章”数据库中创建一个视图以提取您的用户信息,然后将该视图加入您的文章表(可能通过另一个视图)。然后你只需要查询文章 DbContext。
-
我正在尝试这样做,但它给了我一条消息“无法创建类型为 'Project.ViewModels.UserDisplayNameVM' 的常量值。在此上下文中仅支持原始类型或枚举类型。 ”。仍在努力寻找解决方案
-
“视图”是指database view,而不是视图模型。
标签: c# asp.net-mvc entity-framework linq asp.net-identity