我有一个针对.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
会引发InvalidOperationException
:Unable to determine the principal end of an association...
。
我可以添加Fluent api调用来解决这个问题(确实如此),但是它不能识别该表不在“dbo”模式中。同样,我知道Fluent api可用于解决此问题,但为什么数据注释会突然被忽略?
谢谢!
答案 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
所以......是的,和其他答案一样,但我想指出这一点!
快乐的编码!