【发布时间】:2016-10-08 11:40:57
【问题描述】:
设置:
ASP .NET Core 1 Web API
MySQL 服务器社区版 5.7
Entity Framework Core 1.0.1 和 Pomelo MySQL 驱动程序(3 个独立的上下文,3 个独立的数据库)。
上下文:MainContext (maindb)、Module1Context (module1db)、Module2Context (module2db)。
我想执行一个返回帖子列表的查询(来自 Module1Context),但我需要按作者权限(来自 MainContext、用户实体)过滤它们。
所以,我要做的是使用 JOIN 子句对不同的数据库表执行查询:
var results = await module1Ctx.Posts.FromSql("select * from `module1db`.`posts` as `p` inner join `maindb`.`users` as `u` on `p`.`AuthorId`=`u`.`Id` where <conditions here>").ToListAsync();
执行此操作时,我收到一条 SQL 异常,告诉我“序列包含多个元素”。如果我选择p.*,它会起作用,但我还需要拉取用户数据。
Post 实体包含对用户 ID (public long AuthorId {get;set;}) 的引用,以及一个虚假的导航属性 NotMapped,因为 EF 无法自动加入 2 个数据库。 我的第一个问题是——这可能吗?我有一种强烈的感觉,认为这会奏效,但我缺少一些小东西。
如果这不起作用,我将求助于手动执行查询,使用 DbContext 的连接。如果我会这样做,我如何将结果映射到帖子列表中,包括用户数据?
【问题讨论】:
-
请问您为什么使用 EFCore 1.1?它仍在开发中,不能被认为是稳定的
-
EF Core 是稳定的,1.1 是稳定的 1.0 RTM 之后的第一个增量版本发布。我使用 Core 是因为 Web 应用程序只能在 Linux 上运行。无论哪种方式,EF 7 的性能都比 6 好。
-
EFCore 1.1 尚未出现在 nuget 提要上,因此尚未正式发布。我问的原因是什么
-
nuget.org/packages/Microsoft.EntityFrameworkCore 。糟糕,我写的是 1.1,是 1.0.1。
-
嗯,1.0.0/1.0.1 有限制。正如我在下面的回答中所指出的,它不支持 ad-hoc,并且列名称必须与映射匹配(而不是属性名称,它可能与映射不同)
标签: mysql entity-framework asp.net-core dbcontext entity-framework-core