小编Ric*_*oth的帖子

.Net core 3.x Keyless Entity Types 避免表创建

我需要在实体框架核心 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)

如果我尝试应用迁移,则会创建一个名为自定义查询的新表,但我不需要这种情况发生。因为这只是用于保存连接查询中的值的模型,我不会插入、更新或删除此表中的值。如何实现这一目标?

或者有没有更好的方法来解决这种情况。

c# entity-framework-core ef-core-3.0 ef-core-3.1

11
推荐指数
1
解决办法
4586
查看次数