10

我有一个以 .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 可以用来解决这个问题,但是为什么数据注释突然被忽略了呢?

谢谢!

4

2 回答 2

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 中的那些,因此看起来属性被忽略了。

于 2013-01-07T21:25:02.630 回答
0

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

#if NET40

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

所以......是的,与其他答案相同,但我想指出这一点!

快乐编码!

于 2013-09-20T13:52:15.640 回答