背景
我使用efcore3作为一个应用程序,在dbcontext中有许多poco,我想将其创建为数据库表-这里没有问题!我使用linq查询在这里获取数据,生活是美好的。
我还有一些原始sql查询和一些更复杂的报告过程。我为返回的数据创建了poco,并将其作为dbset添加到dbcontext中:
public class FooBarContext : DbContext
{
// ...
public DbSet<FooReport> FooReport { get; set; }
// ...
}
哪里 FooReport
看起来像:
public class FooReport
{
[Key]
public int Id { get; set; }
// ...
}
问题/解决方法
这将创建一个迁移来创建一个名为 FooReport
,这不是我想要的。
我现在的解决方法是从 Migration
因此,本质上,我有一个空迁移:
public partial class AddFooReport : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
// intentionally clear this out, so the entity isn't created / dropped as a table
// migrationBuilder.CreateTable("FooReport", ... );
}
protected override void Down(MigrationBuilder migrationBuilder)
{
// intentionally clear this out, so the entity isn't created / dropped as a table
// migrationBuilder.DropTable("FooReport");
}
}
然后我可以这样调用程序:
var result = this._fooBarContext.Set<FooReport>(@"[SP_FooReport]")
.FromSqlRaw(sql)
.ToList();
这确实管用,但似乎有点老套。
我还尝试通过添加 NotMapped
装饰工 FooReport
但是查询本身失败了。
2条答案
按热度按时间nxowjjhe1#
你可以尝试添加
modelBuilder.Ignore<FooReport>();
呼叫OnModelCreating
方法FooReport
与NotMapped
属性。csbfibhn2#
在efcore3+中,只需从fooreport中删除键,使其成为无键实体类型
在ef 5中也有这样一个属性: