首先使用代码,我创建了一个存储过程,用它调用
_context.MySQLModel.FromSql
我只是为存储过程创建了MySQLModel,我不想在数据库中使用该名称创建表。
因此在模型中,我指定了[NotMapped]:
public class MySQLModel
{
[Key]
public int IdMySQLModel { get; set; }
public string Something { get; set; }
public string SomethingTwo { get; set; }
}
在我添加的ApplicationDbContext中
public DbSet<MySQLModel> MySQLModel { get; set; }
及以下
protected override void OnModelCreating(ModelBuilder builder)
包含
builder.Ignore<MySQLModel>();
执行时失败,并显示以下消息:
System.InvalidOperationException:无法为“ MySQLModel”创建DbSet,因为此类型不包含在上下文模型中。
所以我继续注释掉
//builder.Ignore<MySQLModel>();
再次运行,完美运行。我继续进行修改或创建新模型,执行“添加迁移”,并在迁移中生成表的代码。
有没有办法获取它,以便它不会为新表创建代码,而仍然执行存储过程?
谢谢!
答案 0 :(得分:1)
您需要使用DbQuery<>
(在EF Core 2.1
中可用)而不是DbSet<>
:
public DbQuery<MySQLModel> MySQLModel { get; set; }
然后,无需调用builder.Ignore<MySQLModel>();
并使用[NotMapped]
您可以通过类似的方式使用它:
var mySQLModels = _context.MySQLModel.FromSql("select * from MySQLModelView");