我刚刚为项目的数据库添加了一个新列。我确认该列存在数据库。我已将该属性添加到我的模型中,并使用该模型定义了我的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{}
会产生相同的结果。
答案 0 :(得分:0)
数据库中的名称和类型是什么?也许尝试使用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 });