【问题标题】:Entity Framework does not pick up the value from newly added column实体框架不会从新添加的列中获取值
【发布时间】:2018-02-04 23:24:39
【问题描述】:

型号:

//Auto generated by MVC Model
public partial class user
{    
    public int Ref { get; set; }
    public string First_Name { get; set; }
    public bool isAdmin { get; set; } //the problem
}

数据库:

Ref | First_Name | isAdmin
1   |   Admin    |   1
2   |   Bob      |   0

C#:

var u1= db.users.Find(1); //get Admin
var ia1= u1.isAdmin; //return false (0)
var adminList = db.users.Where(i => i.isAdmin == true).ToList(); //return error

错误:

System.NotSupportedException: '指定类型成员'isAdmin' 是 在 LINQ to Entities 中不受支持。只有初始化器,实体成员, 并支持实体导航属性。'

======

我确实尝试删除 ADO.NET 模型并重新添加它,重新启动我的机器但没有运气 MVC 模型仍然没有从数据库中获取正确的值。 (尽管它选择了新列)。

我确实多次更改了我的数据库结构,这很好,与当时不同的是我将 .NET 框架目标从 4.6 更改为 4.5.2,这会是导致此问题的原因吗?

回到主要问题是为什么模型没有返回正确的值,以及为什么当我通过 (isAdmin == true) 查询时它得到不支持的异常 - 这应该是主要问题,但我对正在发生的事情一无所知.

【问题讨论】:

  • 我很好奇 - 数据库中的isAdmin 是什么数据类型?
  • @Nick.McDermaid 我使用 MS SQL Server,它在数据库中位并在模型中映射为 bool |对于我在几个项目中一直坚持使用这种数据类型的记录,我认为这不应该是问题。
  • Visual Studio 错误列表窗口中是否有关于模型的错误或警告?
  • 那么,如果将 .NET Framework 目标改回 4.6,问题会消失吗?
  • 查看我的代码,我有一个 bool 类型的模型属性,它基于位类型的数据库字段。在我的 lambda 函数中,我没有 == true 部分。例如我有.Where(x => x.IsLeave)。我不认为这应该有所作为。事实上,无论我是否将== true 放在那里,它都会建立

标签: c# .net asp.net-mvc entity-framework linq


【解决方案1】:

我设法在不确切知道发生了什么的情况下解决了这个问题,但我最好的猜测是 ADO.NET/Entity Framework 的缓存(或其他任何东西)。

只需创建一个具有不同名称的 ADO.NET 模型,它就可以正常工作并从数据库中正常加载数据。

如果有人对此案例有假设性的解释,请随时在评论中记下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多