无法从新创建的列

时间:2015-12-08 22:00:24

标签: c# sql-server entity-framework asp.net-web-api

我刚刚为项目的数据库添加了一个新列。我确认该列存在数据库。我已将该属性添加到我的模型中,并使用该模型定义了我的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'始终为空,即使数据库中确实存在值。

无论出于何种原因,似乎我的代码都不相信该列存在于数据库中。

EDIT2:

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

3 个答案:

答案 0 :(得分:0)

  1. screen_icon是否具有getter和setter,或者它是一个变量?应属于财产
  2. 数据库中的名称和类型是什么?也许尝试使用attrbiute强制列名称,如:

    [柱( “screen_icon”)] public string screen_icon {get;组; }

答案 1 :(得分:0)

事实证明该项目使用edmx文件来管理他们的模型。由于我编辑的文件中的噪音量以及我通过“转到定义”而不是文件浏览器找到它的事实,我没有意识到模型文件是从Entities.edmx文件生成的。 / p>

从edmx设计器更新模型后,我的代码按预期工作。我了解到,重要的是要留意注释,告知您不要手动编辑它,因为它是一个自动生成的文件。

答案 2 :(得分:-1)

尝试:

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