在针对.NET 4.5之后,EF数据注释没有“正常工作”

时间:2013-01-04 20:06:52

标签: entity-framework data-annotations .net-4.5 entity-framework-5

我有一个针对.NET 4.0并使用EF 5.0的项目。将目标框架更改为4.5(并更新EF 5.0引用以使用.NET 4.5程序集)后,似乎数据注释不再起作用。例如:

[Table("ApplicationSession", Schema = "Application")]
public class ApplicationSessionEntity
{
    [Key, ForeignKey("GenericSession")]
    public int GenericSessionID { get; set; }
...

过去工作正常,但现在在运行时,DbContext会引发InvalidOperationExceptionUnable to determine the principal end of an association...

我可以添加Fluent api调用来解决这个问题(确实如此),但是它不能识别该表不在“dbo”模式中。同样,我知道Fluent api可用于解决此问题,但为什么数据注释会突然被忽略?

谢谢!

2 个答案:

答案 0 :(得分:8)

在.NET Framework 4.5中,EF注释已从EF.dll移至System.ComponentModel.Annotations程序集。看起来即使你以.NET Framework 4.5为目标,你仍然可以在某处获得EntityFramework.dll v4.4.0.0的引用。因此,您的类将使用4.4.0.0程序集中的属性进行编译。在运行时,正在使用较新的EntityFramework.dll(5.0.0.0),它会从System.ComponentModel.DataAnnotations程序集中查找属性。由于您拥有EF.dll 4.4.0.0中的那些,因此无法找到它们,因此看起来属性被忽略。

答案 1 :(得分:0)

如果您使用.NET 4.5及更高版本,它确实被移到了EF之外。但是如果你在.NET 4.0中编译,你会发现DataAnnotations是有用的。查看代码,您会发现:

#if NET40

namespace System.ComponentModel.DataAnnotations
{
...
}
#endif

所以......是的,和其他答案一样,但我想指出这一点!

快乐的编码!