【发布时间】:2020-10-12 18:46:58
【问题描述】:
背景
我正在将 EF Core 3 用于在 DbContext 中具有多个 POCO 的应用程序,我希望将其创建为数据库表 - 这里没问题!我这里用Linq查询取数据,生活还不错。
我还有一些用于更复杂报告的原始 SQL 查询和过程。我为返回的数据创建了 POCO,并作为 DbSet 添加到 DbContext:
公共类 FooBarContext : DbContext
{
// ...
公共 DbSet FooReport { 获取;放; }
// ...
}
FooReport 的样子:
公共类 FooReport
{
[钥匙]
公共 int ID { 获取;放; }
// ...
}
问题/解决方法
这会为创建一个名为FooReport 的新表创建迁移,这不是我想要的。
我现在的解决方法是从生成的Migration 中手动删除此操作,这样,本质上,我有一个空迁移:
公共部分类 AddFooReport : 迁移
{
protected override void Up(MigrationBuilder migrationBuilder)
{
// 有意清除它,因此实体不会作为表创建/删除
// migrationBuilder.CreateTable("FooReport", ... );
}
protected override void Down(MigrationBuilder migrationBuilder)
{
// 有意清除它,因此实体不会作为表创建/删除
// migrationBuilder.DropTable("FooReport");
}
}
然后我可以像这样调用该过程:
var 结果 = this._fooBarContext.Set(@"[SP_FooReport]") .FromSqlRaw(sql) .ToList();
这确实有效,但看起来很老套。
我也(未成功)尝试通过将 NotMapped 装饰器添加到 FooReport POCO 来解决此问题,但随后查询本身失败。
TL;DR; - 你能将DbSet 定义为一个不是表的实体吗?
【问题讨论】:
标签: c# sql .net entity-framework asp.net-core