2013-07-24 1 views
0

J'ai installé la dernière version de dotConnect pour PostgreSQL. Im essayant d'insérer un enregistrement dans la DB de Postgres. J'ai une colonne de géométrie ce qui me donne des erreurs. Voici le code:Insertion de Spatial Geometry dans EF5 avec dotConnect 6.7 pour PostgreSQL

using (var context = new WKP_DBEntities()) 
{ 
    var Location = DbGeometry.PointFromText(string.Format("POINT({0} {1})", 157873, 364282), 28992); 

    var record = new monitoring_object() 
    { 
     geometry = Location, 
     last_changed_by = "ssg", 
    }; 

    context.monitoring_object.Add(record); 
    context.SaveChanges(); 
} 

Voici le message d'erreur:

System.Data.Entity.Infrastructure.DbUpdateException was unhandled 
    HResult=-2146233087 
    Message=An error occurred while updating the entries. See the inner exception for details. 
    Source=EntityFramework 
    StackTrace: 
     at System.Data.Entity.Internal.InternalContext.SaveChanges() 
     at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() 
     at System.Data.Entity.DbContext.SaveChanges() 
     at ConsoleApplicationGEOdata.Program.Main(String[] args) in c:\Users\Stefan\Documents\Visual Studio 2012\Projects\ConsoleApplicationGEOdata\ConsoleApplicationGEOdata\Program.cs:line 38 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_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.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.Data.UpdateException 
     HResult=-2146233087 
     Message=An error occurred while updating the entries. See the inner exception for details. 
     Source=System.Data.Entity 
     StackTrace: 
      at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
      at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) 
      at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) 
      at System.Data.Entity.Internal.InternalContext.SaveChanges() 
     InnerException: System.ArgumentException 
      HResult=-2147024809 
      Message=Cannot convert value 
      Source=Devart.Data.PostgreSql 
      StackTrace: 
       at Devart.Data.PostgreSql.af.a(Object A_0, Type A_1, Encoding A_2) 
       at Devart.Data.PostgreSql.af.a(String A_0, Encoding A_1, PgSqlType A_2, Object A_3, Int32 A_4, Boolean A_5) 
       at Devart.Data.PostgreSql.PgSqlCommand.a(String A_0, Encoding A_1, ArrayList A_2, Boolean A_3) 
       at Devart.Data.PostgreSql.PgSqlCommand.InternalExecute(CommandBehavior behavior, IDisposable stmt, Int32 startRecord, Int32 maxRecords) 
       at Devart.Common.DbCommandBase.InternalExecute(CommandBehavior behavior, IDisposable stmt, Int32 startRecord, Int32 maxRecords, Boolean nonQuery) 
       at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery) 
       at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior) 
       at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
       at Devart.Data.PostgreSql.Entity.y.a(CommandBehavior A_0) 
       at Devart.Common.Entity.i.b(CommandBehavior A_0) 
       at Devart.Data.PostgreSql.Entity.y.b(CommandBehavior A_0) 
       at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) 
       at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) 
       at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) 
      InnerException: 

Qu'est-ce que je fais mal?

+0

Dites-moi que vous ne parlez pas vraiment de PostgreSQL 6.7 et que vous avez fait une faute de frappe. 'SELECT version();' et collez la sortie dans votre question s'il vous plaît. (OK, vous ne pouvez pas vouloir dire 6.7 car il n'y a jamais eu de version de PostgreSQL 6.7, peut-être voulez-vous dire DotConnect 6.7 pour PostgreSQL?) –

+0

Vous semblez avoir coupé la partie la plus importante de l'exception; cette sortie d'exception est incomplète. –

+0

Désolé, c'est DotConnect 6.7 pour PostgreSQL. Changé. Pour l'exception c'est tout: J'ai fait un "Copier les détails d'exception dans le Presse-papiers". La dernière InnerException est null. – StefanHa

Répondre

1

Votre code fonctionne dans notre environnement: a) dotConnect pour PostgreSQL v 6.7.287 b) SharpMap v1 RC3 c) PostGIS 2.0 d) DDL: CREATE TABLE monitoring_object ( série id NOT NULL, géométrie de géométrie, last_changed_by variant de caractère );

S'il vous plaît give us les informations suivantes: 1) la version de votre SharpMap. Sachez que la version actuelle de dotConnect pour PostgreSQL prend en charge SharpMap 1.0 RC3 (http://sharpmap.codeplex.com/releases/view/106717). La version 1.0 finale sera bientôt prise en charge 2) la version de votre Postgis. Il devrait être de la version 2.0 (ou supérieure). Vous pouvez le vérifier en exécutant "sélectionnez postgis_version()" dans la base de données 3) le script DDL de votre table monitoring_object 4) si possible send us un petit projet de test

La documentation Devart correspondant est disponible à http://blogs.devart.com/dotconnect/enhanced-entity-framework-spatials-support-for-oracle-mysql-and-postgresql.html.

Questions connexes