我创建了一个单独的项目,并将我的模型复制到这个项目中。 我引用了
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松散耦合)?
答案 0 :(得分:3)
是的,此问题已通过.NET 4.5修复。
带有.NET 4.0的EF 5 EntityFramework.dll
的对象目录(也称为EF 4.4)显示了EF中System.ComponentModel.DataAnnotations
和System.ComponentModel.DataAnnotations.Schema
命名空间中的所有属性组件:
而EF 5与.NET 4.5的EntityFramework.dll
不再包含这些名称空间:
这些属性已经移植到.NET 4.5框架程序集System.ComponentModel.DataAnnotations.dll
中,位于EF程序集中以前的名称空间中:
(MinLength
和MaxLength
也在System.ComponentModel.DataAnnotations
中,屏幕截图中所有属性的总列表太长了。)
答案 1 :(得分:0)
您不需要引用所有EF。你应该能够引用System.ComponentModel.DataAnnotations.dll
。添加EF可能只是将其作为参考添加。
FYI MSDN将告诉您框架类中存在哪个命名空间和程序集。
答案 2 :(得分:0)
您不必使用属性来创建元数据。 POCO模型的整个概念就是它。
诀窍是拥有不引用EF的模型类的集合。您可以在任何上下文中安全地重用此程序集。
然后,在另一个程序集中,您创建DbContext类,引用EF并以编程方式创建元数据。在EF中,这种方法称为Code First Fluent Api。