0

Je travaille sur la cartographie géométrie spatiale (Point) sur Postgresql à code C# je besoin de quelque chose comme exemple dans cette question like example in this question mais en utilisant Postgresql au lieu de SQL ServerPlan Postgis point à point en C# en utilisant Fluent NHibernate

Je l'ai fait les éléments suivants

public class Student 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Point Location { get; set; } 
} 

public class StudentMap : ClassMap<Student> 
{ 
    public StudentMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Name); 
     Map(x => x.Location).CustomType<PostGisPointUserTypeConvention>(); 
     Table("Student"); 
    } 
} 

Et a essayé d'utiliser UserTypeConvention comme ci-dessous

public class PostGisPointUserTypeConvention : UserTypeConvention<PostGisGeometryType> 
{ 
    public override void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) 
    { 
     criteria.Expect(c => c.Type == typeof(Point)); 
    } 

    public override void Apply(IPropertyInstance instance) 
    { 
     // Have to set CustomType to be able to read/write rows using NHibernate 
     instance.CustomType<PostGisGeometryType>(); 
     // Have to set CustomSqlType to generate correct SQL schema 
     instance.CustomSqlType("geometry(Point)"); 
    } 
} 

la configuration du Fluent NHibernate est

public class Database 
{ 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
       _sessionFactory = InitializeSessionFactory(); return _sessionFactory; 
     } 
    } 

    /// <summary> 
    /// This Function working fine with Map class in the projects 
    /// </summary> 
    /// <returns></returns> 
    public static ISessionFactory InitializeSessionFactory() 
    { 
     string connectionString = ConfigurationManager.ConnectionStrings["PostgreConnectionString"].ConnectionString; 
     IPersistenceConfigurer config = PostgreSQLConfiguration.PostgreSQL82.ConnectionString(connectionString); 

     FluentConfiguration configuration = Fluently 
      .Configure() 
      .Database(config) 
      .Mappings(m => 
       m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())); 
     configuration.ExposeConfiguration(x => x.SetProperty("hbm2ddl.keywords", "auto-quote")); 
     return configuration.BuildSessionFactory(); 
    } 
    public static ISession OpenSession() 
    { 
     return SessionFactory.OpenSession(); 
    } 
} 

Lorsque Essayez d'exécuter ci-dessous

public void GET() 
    { 
     using (var session = Database.OpenSession()) 
     { 
      // populate the database 
      using (var transaction = session.BeginTransaction()) 
      { 
       Point loc = new Point(38.690993, 38.690993); 
       var student = new Student 
       { 
        Name = "Nehal", 
        Age = 20, 
        Location = loc 
       }; 

       session.Save(student); 
       transaction.Commit(); 
      } 
     } 

    } 

Il me donne exception lorsqu'il est exécuté Database.OpenSession() comme ci-dessous:

FluentNHibernate.Cfg.FluentConfigurationException: « Un invalide ou La configuration incomplète a été utilisée lors de la création d'une SessionFactory. Vérifier collection PotentialReasons et InnerException pour plus de détails "

Exception interne:". Une configuration incorrecte ou incomplète a été utilisé tout en créant un SessionFactory. Vérifiez collection PotentialReasons, et InnerException pour plus de détails «

Loader Exception:. System.IO.FileLoadException Impossible de charger le fichier ou assembly 'GeoAPI, Version = 1.7.4.0, Culture = neutral, PublicKeyToken = a1a0da7def465678' ou . une de ses dépendances la définition manifeste de l'assembly situé ne correspond pas à l'Assemblée référence (Exception de HRESULT: 0x80131040). ":" GeoAPI, version = 1.7.4.0, Culture = neutral, PublicKeyToken = a1a0da7def465678

Mais je n'ai pas utilisé GeoAPI dans les classes C# que j'ai créées

Répondre

0

Je suppose que vous utilisez le type de géométrie Point de l'espace de noms NetTopologySuite? Si c'est le cas, la bibliothèque GeoAPI est l'une de ses dépendances.

Comment référencez-vous actuellement NetTopologySuite dans votre projet? Si vous n'utilisez pas déjà NuGet, je le recommande fortement car il prendra automatiquement soin d'installer toutes les dépendances nécessaires pour vous (voir here pour la page NTS NuGet).