Skocz do zawartości

EntityFramework + Sfera Nexo

Polecane posty

W jednym z dodatków wykorzystujących w chwili obecnej SfereGT do połączeń z zewnętrzną bazą danych wykorzystujemy EntityFramework w wersji 6. Klient zasugerował migrację całości swojej infrastruktury do nowej wersji Insert Nexo, priorytetem dla niego jest wykorzystywanie dodatku który został dla niego napisany. 

Zgodnie z zaleceniami został rozpoczęty proces migracji do Nexo ale tu napotkaliśmy problem w chwili dodanie referencji wymaganych w dokumentacji 

  • InsERT.Mox.EntityFramework.Core.dll
  • InsERT.Mox.EntityFrameworkSupport.dll
  • InsERT.Mox.UIFramework.dll

Pojawia się problem zdublowania biblioteki:

Severity

Code

Description

Project

File

Line

Suppression State

Error

CS0433

The type 'DbContext' exists in both 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' and 'InsERT.Mox.EntityFramework.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=574d892b577c05ec'

Nexo

C:\GITHUB\Nexo\Nexo\Nexo\DBContext.cs

16

Active

Próba wykorzystania InsERT.Mox.EntityFramework.Core.dll bez dodatkowej referencji do EntityFramework również zakończyła się nie powodzeniem. 

Proszę o podpowiedź jak rozwiązać problem.

AKTUALIZACJA:

Po kilku próbach udało się rozwiązać powyższy problem za pośrednictwem alliasów. Referencji EntityFramework nadany został dodatkowy alias i błąd został rozwiązany. Dla kolejnych którzy będą mieli podobny problem:

1351355428_Screenshot2020-09-12at21_26_12.thumb.png.c507894f5d94b02a24b07775800b825c.png

I dodanie w inicjalizacji modelu danych 

extern alias entityFrameworkMain;

i później 

    using entityFrameworkMain.System.Data.Entity;

    using entityFrameworkMain.System.Data.Entity.Infrastructure;

Powyższe rozwiązuje problem zdublowania referencji do EntityFramework, przy próbie zbudowania i uruchomienia pojawią się nowy błąd mimo aliasu biblioteki Sfery celują nie na to rozszerzenie co powinny:

Microsoft.Practices.Unity.ResolutionFailedException   HResult=0x80131500   Message=Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "(none)". Exception occurred while: while resolving. Exception is: ResolutionFailedException - Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych". Exception occurred while: while resolving. Exception is: AggregateException - Wystąpił przynajmniej jeden błąd. ----------------------------------------------- At the time of the exception, the container was:   Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych

----------------------------------------------- At the time of the exception, the container was:   Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,(none)   Source=Microsoft.Practices.Unity   StackTrace:    at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)    at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides)    at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, ResolverOverride[] overrides)    at InsERT.Moria.Sfera.MenedzerPolaczen.<>c__DisplayClass2_0.<Konfiguruj>b__1()    at InsERT.Mox.Helpers.AdvancedStopwatch.Measure[T](Func`1 action, String title, Boolean supressTrace)    at InsERT.Moria.Sfera.MenedzerPolaczen.<>c__DisplayClass2_0.<Konfiguruj>b__0(Object <p0>)    at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()    at System.Threading.ThreadPoolWorkQueue.Dispatch()    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() I

nner Exception 1: ResolutionFailedException: Resolution of the dependency failed, type = "System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace", name = "InsERT.Moria.ModelDanych". Exception occurred while: while resolving. Exception is: AggregateException - Wystąpił przynajmniej jeden błąd. ----------------------------------------------- At the time of the exception, the container was:   Resolving System.Data.Entity.Core.Metadata.Edm.MetadataWorkspace,InsERT.Moria.ModelDanych

Inner Exception 2: AggregateException: Wystąpił przynajmniej jeden błąd.

Inner Exception 3: TypeInitializationException: Inicjator typów zgłosił wyjątek dla typu 'System.Data.Entity.Config.DbConfigurationManager'.

Inner Exception 4: TypeInitializationException: Inicjator typów zgłosił wyjątek dla typu 'System.Data.Entity.Internal.AppConfig'.

Inner Exception 5: InvalidCastException: Nie można zrzutować [A]System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection na System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection. Typ A pochodzi od EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 w kontekście Default w lokalizacji C:\GITHUB\Nexo\Nexo\Nexo\bin\Debug\EntityFramework.dll. Typ B pochodzi od InsERT.Mox.EntityFramework.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=574d892b577c05ec w kontekście Default w lokalizacji C:\GITHUB\Nexo\Nexo\Nexo\bin\Debug\InsERT.Mox.EntityFramework.Core.dll.

 

Proszę o sugestię.

Edytowane przez Mariusz Miziolek
  • Lubię to 1
Link to postu
Dnia 12.09.2020 o 15:42, Mariusz Miziolek napisał:

Próba wykorzystania InsERT.Mox.EntityFramework.Core.dll bez dodatkowej referencji do EntityFramework również zakończyła się nie powodzeniem. 

Czy może Pan opisać, jak wyglądało to niepowodzenie? Korzystanie z  InsERT.Mox.EntityFramework.Core.dll bez referencji do EntityFramework jest możliwe. Jeśli w projekcie była ta referencja do EntityFramework i została usunięta, to proszę się upewnić, że w pliku App.config nie ma sekcji konfiguracji o nazwie "entityframework". Jeśli tam jest, to można ją usunąć lub zakomentować i spróbować jeszcze raz. 

Jeśli to nie zda egzaminu i zależy Panu na tym, żeby naprawdę załadować do jednej aplikacji dwie wersje EF, to można jeszcze spróbować zmian konfiguracji opisanych tutaj albo ładowania jednej z wersji biblioteki w osobnej domenie aplikacyjnej. 

  • Dziękuję 1
Link to postu
5 godzin temu, Katarzyna Rozmarynowska napisał:

 App.config nie ma sekcji konfiguracji o nazwie "entityframework". Jeśli tam jest, to można ją usunąć lub zakomentować i spróbować jeszcze raz. 

Odziwo pierwsze podejście było w tym kierunku, niestety zgłaszany przez Visual Studio nie sugerował że pozostał dodatkowy wpis w konfiguracji. 

Podsumowując, najprostsze rozwiązanie jest najlepsze, ponowne sprawdzenie pliku konfiguracyjnego App.config i teraz wszystko działa jak należy bez dodatkowej referencji do EntityFramework-a. 

Dziękuję za podpowiedź i sugestię, problem rozwiązany.

Link to postu
×
×
  • Dodaj nową pozycję...