【问题标题】:Entity Framework "Invalid Column Name"实体框架“列名无效”
【发布时间】:2017-03-24 11:07:09
【问题描述】:

我们已将现有数据库转换为使用 EF,因此我们编写类以映射到我们的表。我添加了一个新列,一个名为“iframeVideoId”的可为空的 int。我用

映射它
public int? iframeVideoId { get; set; }

当我搜索该表时,它会以'

列名无效的错误

。这是一个简单的属性,它不是索引或与任何其他表相关。我尝试在数据库中将其重命名为“DisplayVideo”,并且使其不可为空。然后我有

[Column("DisplayVideo")]
public int iframeVideoId { get; set; }

现在我收到一条错误消息,显示 DisplayVideo 不是有效的列。当然,我已经仔细检查了我指向正确的数据库,并确认我的代码可以指向的每个数据库都有这个列。我还完成了清理和重建所有工作,并重新启动了我的机器。有什么问题?这是一个基本的专栏,它就在那里。我从过去的经验中知道,如果类型不匹配(它们都是 int ),我会收到与类型之间转换失败有关的错误。这对我来说毫无意义。我没有要刷新的 edmx 文件,因为我们正在编写类以直接映射到数据库

只是补充一下,我将列更改为字符串,这没有任何区别。这是一个新列,具有简单的值,而 EF 声称它不存在。

而且,我将该列添加到另一个表中(显然是次优的),它立即就可以正常工作了。不过,我仍然想知道为什么我有一个无法在 EF 中添加列的表

【问题讨论】:

  • 您确定它在该数据库中的正确表和架构中吗?

标签: entity-framework ef-code-first


【解决方案1】:

由于复制/粘贴情况,我的映射类出现错误。如您所见,将 TranferredToEVP 映射到 3 个不同的列。我在最后一列 TranferredToGUID 上收到“无效的列名”,但正在寻找 TranferredToGUID1。希望这可以帮助。

this.Property(t => t.TransferredToEVP).HasColumnName("TransferredToEVP");
this.Property(t => t.TransferredToEVP).HasColumnName("TransferredToName");
this.Property(t => t.TransferredToEVP).HasColumnName("TransferredToGUID");

【讨论】:

  • 这个去哪儿了?
【解决方案2】:

我遇到了和 Amy Jonas 一样的问题,如果您碰巧遇到这个问题,请确保映射正确。

我的代码以前是这样的:

Property(d => d.LastUpdatedOn).HasColumnName("LastUpdatedOn");
Property(d => d.LastUpdatedOn).HasColumnName("LastUpdatedBy");

应该是:

Property(d => d.LastUpdatedOn).HasColumnName("LastUpdatedOn");
Property(d => d.LastUpdatedBy).HasColumnName("LastUpdatedBy");

有时我们太忙而忘记查看这些细节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2012-08-24
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多