10

Ich habe ein Projekt, das auf .NET 4.0 ausgerichtet war und EF 5.0 verwendet. Nachdem das Zielframework auf 4.5 geändert wurde (und die EF 5.0-Referenz aktualisiert wurde, um die .NET 4.5-Assembly zu verwenden), scheint es, als ob die Datenanmerkungen nicht mehr funktionieren. Zum Beispiel:EF-Datenanmerkungen funktionieren nicht nach Targeting .NET 4.5

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

verwendet funktionieren, aber jetzt zur Laufzeit wirft die DbContext ein InvalidOperationException: Unable to determine the principal end of an association....

Ich kann die Fluent API-Aufrufe hinzufügen, um dies zu lösen (und es tut), aber dann erkennt es nicht, dass die Tabelle nicht in der "Dbo" Schema ist. Auch hier weiß ich, dass die Fluent API dazu verwendet werden kann, dies zu beheben, aber warum werden die Datenanmerkungen plötzlich ignoriert?

Danke!

+1

Haben Sie einen Verweis auf System.ComponentModel.Annotations? Die Anmerkungen wurden in .NET Framework 4.5 in diese Assembly verschoben. Was ich denke, ist, dass Sie irgendwie mit Annotationen alte Annotationen kompilieren und die EF5 Runtime nach neuen sucht. Sie können F12 auf der Tabelle drücken und sehen, wo es hingeht, um dies zu überprüfen. – Pawel

+0

@Pawel Ich habe einen Verweis auf System.ComponentModel.DataAnnotations. Ich glaube, dass es erforderlich war, als wir auf EF 5.0 aktualisiert haben. Ich habe versucht, die .NET 4.0 und .NET 4.5 Versionen dieser Assembly zu verwenden, und beide zeigen das gleiche Verhalten. – Rob

+0

Haben Sie irgendwo einen Verweis auf EntityFramework.dll, dessen Version 4.4.0.0 ist? – Pawel

Antwort

7

In .NET Framework 4.5 wurden EF-Anmerkungen von EF.dll in die Assembly System.ComponentModel.Annotations verschoben. Es scheint, dass obwohl Sie .NET Framework 4.5 als Ziel haben, Sie immer noch einen Verweis auf EntityFramework.dll v4.4.0.0 haben. Daher werden Ihre Klassen mit Attributen aus der Assembly 4.4.0.0 kompiliert. Zur Laufzeit wird die neuere EntityFramework.dll (5.0.0.0) verwendet, und sie sucht nach Attributen aus der Assembly System.ComponentModel.DataAnnotations. Diese können nicht gefunden werden, da Sie die aus EF.dll 4.4.0.0 haben und daher scheint es, dass Attribute ignoriert werden.

+0

Danke dafür. Ich aktualisierte Projekt von 4.0 -> 4.5 und Referenzen auf EF 4.4.0.0 hingen. Ich habe gerade den Verweis auf 4.4.0.0 entfernt und nuget install package ausgeführt. – formatc

0

Es ist wahr, dass es außerhalb der EF verschoben wurde, wenn Sie .NET Version 4.5 und höher verwenden. Aber wenn Sie in .NET 4.0 kompilieren, finden Sie die DataAnnotations als zu verwenden. Blick in den Code, werden Sie diese finden:

#if NET40 

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

So ... ja, das gleiche wie andere Antworten, aber ich möchte dies darauf hin!

Glückliche Codierung!

Verwandte Themen