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

问题描述 投票:0回答:2

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

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

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

有没有办法获取它,这样它就不会为新表创建代码并仍然执行存储过程?

谢谢!

c# entity-framework stored-procedures asp.net-core
2个回答
2
投票

您需要使用

DbQuery<>
(在
EF Core 2.1
中可用)而不是
DbSet<>

public DbQuery<MySQLModel> MySQLModel { get; set; }

那就不需要调用

builder.Ignore<MySQLModel>();
和使用
[NotMapped]

您可以按照类似的方式使用它:

var mySQLModels = _context.MySQLModel.FromSql("select * from MySQLModelView");

0
投票

我有同样的错误,无法在今天的版本中使用 Dbquery。有没有人有解决办法?

© www.soinside.com 2019 - 2024. All rights reserved.