类型或命名空间名称'Column'无法找到。

15

我相信我在这里漏掉了一些简单的东西。 我正在尝试遵循一个Code First Entity Framework教程,告诉我使用一些数据注释。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;

namespace Model
{
    public class Destination
    {
        public int DestinationId { get; set; }

        [Required]
        public string Name { get; set; }
        public string Country { get; set; }
        [MaxLength(500)]
        public string Description { get; set; }

        [Column(TypeName="image")]
        public byte Photo { get; set; }

        public List<Lodging> Lodgings { get; set; }
    }
}

编译器对前两个注解没有任何问题,但它似乎不喜欢:[Column(TypeName="image")]

错误:

  • 找不到类型或命名空间名为'Column'。

  • 找不到类型或命名空间名为'ColumnAttribute'。

我正在使用Visual Studio 2012和Entity Frameworks 5。

有什么建议吗?


我认为photo属性必须是一个字节数组而不是一个字节。 - Peter Bruins
2个回答

33
在 Entity Framework 4.3.1 中,ColumnAttribute 定义在 System.ComponentModel.DataAnnotations 命名空间中,该命名空间可在 EntityFramework.dll 中获得。因此,如果你有对该 dll 的引用和命名空间的 using 语句,那么就可以使用该属性。
在 Entity Framework 5 中,它位于 System.ComponentModel.DataAnnotations.Schema 命名空间中,因此您需要在类中添加对该命名空间的引用。
using System.ComponentModel.DataAnnotations.Schema;

你可以在这里阅读更详细的信息。


添加了引用之后,我必须进行完全的清理和重建。仅仅重新构建是不起作用的。 - Joseph Snow
你的修复方法对我有用,但上面的链接似乎已经失效了。 - RussellH
@RussellH 谢谢!已修复链接。 - Shyju
这对EF 6.*也是适用的。 - schar
如果您仍然遇到问题,请不要忘记为 System.ComponentModel.DataAnnotations.Schema 添加引用。 - chris c

1

我已经有了正确的using语句,但仍然存在问题...

尽管我已经使用了正确的using语句,但我仍然遇到了这个问题。

我的项目是通过dotPeek反编译dll文件生成的(原始源代码已丢失)。

dotPeek创建的项目引用了一个EntityFramework.dll的副本,它只是在某个文件夹中,并没有被NuGet管理。

对我有用的方法是删除对EntityFramework的引用,然后使用NuGet控制台重新添加它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接