可以';t从新创建的列中查询值

本文关键字:创建 查询 新创建 可以 | 更新日期: 2023-09-27 18:26:08

我刚刚为一个项目向数据库添加了一个新列。我确认数据库中存在该列。我已经将属性添加到我的模型中,并且我的dbset是使用该模型定义的。但是,一旦我尝试查询该列的值,它就会给我NotSupportedException

LINQ to Entities中不支持指定的类型成员"screen_icon"。仅支持初始值设定项、实体成员和实体导航属性。

上下文类

public partial class dml_entities : DbContext
{
    public dml_entities() : base("name=dml_entities")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    // ...
    public virtual DbSet<screen> screen { get; set; }
    // ...
}

型号

public partial class screen
{
    // ...
    public string screen_icon { get; set; }
    // ...
}

控制器代码

public class ScreenController : ApiController
{
    private dml_entities db = new dml_entities()
    public IQueryable<object> Get_screen()
    {
        return db.screen.Select(e => new { icon = e.screen_icon });
    }
}

编辑:

当我在选择之前db.screen.ToList()时,错误会消失,但"screen_icon"始终为null,即使数据库中实际上有一个值。

不管出于什么原因,我的代码似乎不相信数据库中存在该列。

第2版:

不确定它是否相关,但异常似乎不会在控制器代码本身中触发。尝试try{} catch{}会产生相同的结果。

可以';t从新创建的列中查询值

  1. screen_icon有getter和setter还是一个变量?应该是一处房产
  2. 数据库中的名称和类型是什么?也许可以尝试使用attrbiute强制列名,如:

    [列("screen_icon")]公共字符串screen_icon{get;set;}

事实证明,该项目使用了一个edmx文件来管理他们的模型。由于我编辑的文件中有大量噪音,而且我是通过"转到定义"而不是文件资源管理器找到的,所以我没有意识到模型文件是从Entities.edmx文件生成的。

一旦我从edmx设计器中更新了模型,我的代码就如预期的那样工作了。我了解到,注意那些通知你不要手动编辑的评论很重要,因为这是一个自动生成的文件。

尝试:

    return db.screen.ToList().Select(e => new { icon = e.screen_icon });