10

Mam projekt, który był skierowany na .NET 4.0 i używa EF 5.0. Po zmianie docelowego schematu na 4.5 (i aktualizacji odwołania do wersji 5.0 EF do używania zestawu .NET 4.5) wydaje się, że adnotacje danych już nie działają. Na przykład:Adnotacje danych EF nie działają po kierowaniu .NET 4.5

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

pracował w porządku, ale teraz czasie wykonywania, DbContext zgłasza InvalidOperationException: Unable to determine the principal end of an association....

Mogę dodać wywołania Fluent api, aby rozwiązać ten problem (i robi to), ale wtedy nie rozpoznaje, że tabela nie jest w schemacie "dbo". Ponownie, wiem, że Fluent API może być użyty do rozwiązania tego problemu, ale dlaczego adnotacje danych nagle są ignorowane?

Dzięki!

+1

Czy masz odniesienia do System.ComponentModel.Annotations? Adnotacje zostały przeniesione do tego zestawu w programie .NET Framework 4.5. Myślę, że może się zdarzyć, że w jakiś sposób kompilujesz się z adnotacjami z dawnymi anonacjami, a środowisko wykonawcze EF5 szuka nowych. Możesz nacisnąć F12 na stole i zobaczyć, gdzie idzie, aby to sprawdzić. – Pawel

+0

@Pawel Mam odniesienia do System.ComponentModel.DataAnnotations. Uważam, że było to wymagane, gdy uaktualniliśmy do wersji EF 5.0. Próbowałem używać wersji .NET 4.0 i .NET 4.5 tego zestawu i oba wykazują takie samo zachowanie. – Rob

+0

Czy masz gdzieś odniesienie do EntityFramework.dll, którego wersja jest 4.4.0.0? – Pawel

Odpowiedz

7

W programie .NET Framework 4.5 Adnotacje EF zostały przeniesione z EF.dll do zestawu System.ComponentModel.Annotations. Wygląda na to, że nawet jeśli kierujesz program .NET Framework 4.5, nadal masz gdzieś odwołanie do EntityFramework.dll v4.4.0.0. W rezultacie twoje klasy są kompilowane za pomocą atrybutów z zespołu 4.4.0.0. W środowisku wykonawczym używany jest nowszy plik EntityFramework.dll (5.0.0.0), który szuka atrybutów z zestawu System.ComponentModel.DataAnnotations. Nie można ich znaleźć, ponieważ masz te z EF.dll 4.4.0.0 i dlatego wygląda na to, że atrybuty są ignorowane.

+0

Dzięki za to. Uaktualniłem projekt z wersji 4.0 -> 4.5 i zawieszono odniesienia do EF 4.4.0.0. Właśnie usunąłem odwołanie do 4.4.0.0 i uruchomiłem pakiet instalacyjny nuget. – formatc

0

To prawda, że ​​został przeniesiony poza EF, jeśli używasz .NET w wersji 4.5 i nowszych. Ale jeśli skompilujesz w .NET 4.0, znajdziesz DataAnnotations. Zajrzyj do kodu, znajdziesz:

Tak ... tak, jest taki sam jak inne odpowiedzi, ale chcę to wskazać!

Szczęśliwe kodowanie!