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