【问题标题】:Entity Framework Invalid column name when adding property that is not in db table添加不在数据库表中的属性时,实体框架无效的列名
【发布时间】:2015-08-24 03:10:16
【问题描述】:

我已经决定,与数据库表中的实际内容相比,视图表示层上需要不同的东西太多了。

我在 C# 中有一个属性类,它代表我的数据库的模型 但是,我正在阅读有关 ViewModels 的内容,我可以看到它们如何做到不显示包含您不希望在视图上显示的不必要的数据量的好事情,并且它也可以是组合多个模型的重要聚合你有更多的东西可以用于滴入视图。

我只是尝试添加一个具有属性的类

  public class ExtendedFile
  {
     public string FileSize { get; set; }
  }

然后我想我可以简单地将它作为另一个属性添加到我的另一个模型类中,所以我添加了它

public ExtendedFile ExtendedFile { get; set; }

那么看来我可以在我的控制器中简单地补水

 file.ExtendedFile.FileSize = ConvertFileSize(file.size);

那么我的视图现在有了

<td>@item.ExtendedFile.FileSize</td>

那没有成功.. 控制器方法中有代码,其中连接 2 个表的 linq 查询被吓坏了。错误信息是:

Invalid column name 'ExtendedFile_FileSize'.

导致错误的代码是:

var query = (
    from qtips in dbProd.tblTips 
    where qtips.id == 30 
    join files in dbProd.tblFiles on qtips.id.ToString() 
    equals files.@group select new { qtips, files }).ToList();

【问题讨论】:

  • 显示产生错误的控制器代码
  • var query = (from qtips in dbProd.tblTips where qtips.id == 30 join files in dbProd.tblFiles on qtips.id.ToString() equals files.@group select new { qtips, files }).ToList();
  • 所以它尝试加入 dbProd.tblFiles 并且 tblFiles 表没有 FileSize 列。
  • 我正在阅读/谷歌搜索,也许只需添加属性 [NotMapped] 就可以了吗?在物业的顶部?
  • 但是你的问题是关于视图模型的。如果ExtendedFile 不是您的数据模型的一部分,则它永远不应该在您的数据模型中,只能在相应的视图模型中。为什么你会有一个只包含一个属性的类?

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


【解决方案1】:

在不是数据库列的属性上添加属性为[NotMapped]

【讨论】:

  • 1.我在 cmets 中说我将尝试这样做,并且它起作用了“我正在阅读/谷歌搜索,也许只需在属性顶部添加属性 [NotMapped] 就可以了吗?” ,但我意识到这是一个不好的方法,因为我这样做的全部目的是拥有一个我可以使用的 ViewModel,它是数据库记录的一部分,而有些不是它们的一部分,
【解决方案2】:

感谢 Stephen,虽然我意识到我“可以”确实使用这个其他模型,但我只是在违背真正的 ViewModel 的正确模式

因此,我已经在 40 分钟前通过简单地添加 [NotMapped] 来完成这项工作

[NotMapped]
public ExtendedFile ExtendedFile { get; set; }

它暴露了一个更大的问题,即我不了解 ViewModel。

因此,虽然“有效”,但我将改为使用带有

的 ViewModel
  1. 我想从 tblFiles 类中显示的属性
  2. 这个ExtendedFile类的属性如

    public class ExtendedFile
    {
        public string FileSize { get; set; }
        //more properties 
    }
    

【讨论】:

    【解决方案3】:

    这意味着它找不到模型中定义的数据库字段。

    例如,我的问题是我把测试数据库的“连接字符串”写错了。

    【讨论】:

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