【问题标题】:ModelBuilder.Ignore and [NotMapped] for Model used in Stored Procedure Call用于存储过程调用的模型的 ModelBuilder.Ignore 和 [NotMapped]
【发布时间】:2018-10-12 21:32:19
【问题描述】:

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

_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


    【解决方案1】:

    您需要使用DbQuery&lt;&gt;(在EF Core 2.1 中可用)而不是DbSet&lt;&gt;

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

    那么就不需要调用builder.Ignore&lt;MySQLModel&gt;();而使用[NotMapped]

    你可以用类似的方式使用它:

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

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 2017-07-05
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多