可以';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{}
会产生相同的结果。
- screen_icon有getter和setter还是一个变量?应该是一处房产
-
数据库中的名称和类型是什么?也许可以尝试使用attrbiute强制列名,如:
[列("screen_icon")]公共字符串screen_icon{get;set;}
事实证明,该项目使用了一个edmx文件来管理他们的模型。由于我编辑的文件中有大量噪音,而且我是通过"转到定义"而不是文件资源管理器找到的,所以我没有意识到模型文件是从Entities.edmx文件生成的。
一旦我从edmx设计器中更新了模型,我的代码就如预期的那样工作了。我了解到,注意那些通知你不要手动编辑的评论很重要,因为这是一个自动生成的文件。
尝试:
return db.screen.ToList().Select(e => new { icon = e.screen_icon });