2009-11-05 10 views
5

Dokonuję migracji aplikacji mojej firmy (obecnie uruchamianej przez SQL Server i Oracle) do ASP NET MVC i Entity Framework w celu zachowania trwałości.Entity Framework - Mapowanie problemu dziesiętnego (13,0)

Utwórz mój model jednostki oparty na bazie danych SQL Server e osobno Tworzę dysk SSDL dla Oracle (dla Oracle używam DevArt dotConnect dla Oracle Provider) i pojawia się kilka problemów z bólem.

Moje podstawowe klucze tabeli są na serwerze SQL są typu dziesiętnego (13,0) i na Oracle są numeryczne (13,0), ale Oracle mapują typ na Int64 i SQL Server na dziesiętne, ale potrzebuję tego serwera SQL zamapuj go na Int64.

Robię te modyfikacje ręcznie na Entity Data Model i tworzyć rekordy to działa dobrze, ale kiedy trzeba usunąć lub zaktualizować jakiś rekord dostałem te błąd:

Podana wartość nie jest instancją typu ' Edm.Decimal”nazwa Parametr: wartość

at System.Data.Common.CommandTrees.DbConstantExpression..ctor(DbCommandTree commandTree, Object value, TypeUsage constantType)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateValueExpression(DbCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.GenerateEqualityExpression(DbModificationCommandTree commandTree, EdmProperty property, PropagatorResult value)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildPredicate(DbModificationCommandTree commandTree, PropagatorResult referenceRow, PropagatorResult current, TableChangeProcessor processor, Boolean& rowMustBeTouched)
at System.Data.Mapping.Update.Internal.UpdateCompiler.BuildDeleteCommand(PropagatorResult oldRow, TableChangeProcessor processor)
at System.Data.Mapping.Update.Internal.TableChangeProcessor.CompileCommands(ChangeNode changeNode, UpdateCompiler compiler)

Ktoś może mi pomóc?

Dlaczego mapowanie Entity Framework jest tak naprawione? Może być bardziej elastyczny?

Ps .: Błąd, który mam, podejrzewam, że jest tak z powodu skojarzenia.

Mam jednostkę o nazwie Prowincja i inny nazwany Kraj i myślę, że powiązanie między tymi elementami powoduje problem podczas aktualizacji i usuwania.

Pozdrawiam,

Douglas Aguiar

Odpowiedz

2

To może lub nie może pomóc, ale miałem ten sam błąd z robi to samo. Tak więc edytowałem model koncepcyjny i zmieniłem pole klucza podstawowego z Int32 na dziesiętny. Jak dotąd wydaje się, że naprawiono pewne rzeczy. Nadal muszę przetestować ponownie na Sql Server i upewnij się, że to nie złamać.

0

Otrzymałem błąd "Podana wartość nie jest instancją typu" Edm.Decimal "Nazwa parametru: wartość" jak napisałeś w swoim pytaniu. Zmieniłem domyślne typy danych z Decimal na Int32, ponieważ lepiej odzwierciedla to prawdziwe pisanie. Kiedy po raz pierwszy dotknąłem tego błędu, wycofałem zmiany typu i wciąż otrzymywałem wyjątek, ale zmieniło się ono nieznacznie, ale doprowadziło do dalszego kopania. Podsumowując, w moim scenariuszu spodziewaliśmy się, że wyzwalacz zapełni PK podczas utrzymywania przez dyrektywę Before Insert. Problem polegał na tym, że klasa domenowa zbudowana przez EF ustawiała wartość PK na 0, więc wyzwalacz nigdy nie był wyzwalany, ponieważ przychodzący PK nie był zerowy. Oczywiście EF nie pozwoli ci ustawić Jednostki PK na zerową. Może to pomoże komuś innemu w przyszłości.