存储过程调用中使用的Model的ModelBuilder.Ignore和[NotMapped]

时间:2018-10-12 21:32:19

标签: c# entity-framework stored-procedures asp.net-core

首先使用代码,我创建了一个存储过程,用它调用

_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>();

再次运行,完美运行。我继续进行修改或创建新模型,执行“添加迁移”,并在迁移中生成表的代码。

有没有办法获取它,以便它不会为新表创建代码,而仍然执行存储过程?

谢谢!

1 个答案:

答案 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");