我的Models项目中是否需要使用代码优先属性来定义模型的EntityFramework?

时间:2013-09-05 18:30:13

标签: c# asp.net-mvc entity-framework ef-code-first

我创建了一个单独的项目,并将我的模型复制到这个项目中。 我引用了

using System.ComponentModel.DataAnnotations

我的模型定义如下:

 public class File
 {
        [Key]
        [Column("file_id")]
        public int Id { get; set; }

        [Column("user_id")]
        public int UserId { get; set; }

  ...
}

我得到的错误是:

The type or namespace Column could not be found ...

如果我添加对EntityFramework的引用,它可以正常工作,但我希望通过引用它来为我的Web Api Rest Client库重新使用我的模型项目,并且不想无缘无故地引入EF。

我正在使用.net 4.0

他们是否在4.5中解决了这个问题(使其与EF松散耦合)?

3 个答案:

答案 0 :(得分:3)

是的,此问题已通过.NET 4.5修复。

带有.NET 4.0的EF 5 EntityFramework.dll的对象目录(也称为EF 4.4)显示了EF中System.ComponentModel.DataAnnotationsSystem.ComponentModel.DataAnnotations.Schema命名空间中的所有属性组件:

EF 5 with .NET 4.0

而EF 5与.NET 4.5的EntityFramework.dll不再包含这些名称空间:

EF 5 with .NET 4.5

这些属性已经移植到.NET 4.5框架程序集System.ComponentModel.DataAnnotations.dll中,位于EF程序集中以前的名称空间中:

DataAnnotations with .NET 4.5

MinLengthMaxLength也在System.ComponentModel.DataAnnotations中,屏幕截图中所有属性的总列表太长了。)

答案 1 :(得分:0)

您不需要引用所有EF。你应该能够引用System.ComponentModel.DataAnnotations.dll。添加EF可能只是将其作为参考添加。

FYI MSDN将告诉您框架类中存在哪个命名空间和程序集。

答案 2 :(得分:0)

您不必使用属性来创建元数据。 POCO模型的整个概念就是它。

诀窍是拥有引用EF的模型类的集合。您可以在任何上下文中安全地重用此程序集。

然后,在另一个程序集中,您创建DbContext类,引用EF并以编程方式创建元数据。在EF中,这种方法称为Code First Fluent Api。

http://codefirst.codeplex.com/