我需要在Entity Framework Core 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();
}
}
使用 .NET Core 2.2
var entity = _context.Query<CustomQuery>().FromSqlRaw(Regex.Unescape(selectQuery)).AsNoTracking().FirstOrDefault();
使用 .NET Core 3.1
var newEntity = _context.CustomQuery.FromSqlRaw(Regex.Unescape(selectQuery)).AsNoTracking().FirstOrDefault();
如果我尝试应用迁移,那么会创建一个名为“custom query”的新表,但是我不需要这种情况发生。因为这只是一个用于保存联接查询值的模型,我不会在此表中插入、更新或删除值。如何实现这一点?或者是否有更好的方法来处理这种情况?