Ric*_*oth 11 c# entity-framework-core ef-core-3.0 ef-core-3.1
我需要在实体框架核心 3.1.1 中执行一个复杂的 sql 查询,在研究中我发现无键实体类型是代码优先方法的方法。我看到很多关于 dbquery 的文档,但这在 .net core 3.x 中被标记为过时
根据 Microsoft 文档,它说 dbquery 已过时,因此请改用 dbset 方法,但使用 dbset 它试图在数据库中创建一个新表。如何在应用迁移时禁用无键实体类型中的表生成?
示例代码
public class ApplicationContext : DbContext
{
public DbSet<CustomQuery> CustomQuery { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Ignore<CustomQuery>();
modelBuilder.Entity<CustomQuery>().HasNoKey();
}
}
Run Code Online (Sandbox Code Playgroud)
使用 .net 核心 2.2
var entity = _context.Query<CustomQuery>().FromSqlRaw(Regex.Unescape(selectQuery)).AsNoTracking().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
使用 .net 核心 3.1
var newEntity = _context.CustomQuery.FromSqlRaw(Regex.Unescape(selectQuery)).AsNoTracking().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
如果我尝试应用迁移,则会创建一个名为自定义查询的新表,但我不需要这种情况发生。因为这只是用于保存连接查询中的值的模型,我不会插入、更新或删除此表中的值。如何实现这一目标?
或者有没有更好的方法来解决这种情况。
Iva*_*oev 14
这是 EF Core 3 中的一个已知缺陷,在此处报告3.0 升级 - 带有 HasNoKey()(以前的查询类型)的实体在添加迁移时尝试创建表 #18116。
作为To 与 From 方法的“重复”关闭:建议对 ToTable、ToQuery、ToView、FromSql 和其他相关方法进行合理化 #17270和能够从迁移中排除/跳过/忽略模型的一部分,以便不创建表(对于重叠的有界上下文)#2725,两者都计划在 5.0 版本中发布,这意味着它最终会在该版本中得到解决。
EF Core 团队成员之一在评论中提到了当前的解决方法:
现在,你可以使用类似的东西
.ToView("You forgot to use FromSql with ModQueueEntry")
或更一般地,使用.ToView(null),例如
modelBuilder.Entity<CustomQuery>().HasNoKey().ToView(null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4586 次 |
| 最近记录: |