using Microsoft.SqlServer.Types; using System; using System.Data; using System.Data.Entity.Spatial; using System.Data.SqlClient; namespace Dapper.EntityFramework { /// /// Type-handler for the DbGeometry spatial type /// public class DbGeometryHandler : Dapper.SqlMapper.TypeHandler { /// /// Create a new handler instance /// protected DbGeometryHandler() { } /// /// Default handler instance /// public static readonly DbGeometryHandler Default = new DbGeometryHandler(); /// /// Assign the value of a parameter before a command executes /// /// The parameter to configure /// Parameter value public override void SetValue(IDbDataParameter parameter, DbGeometry value) { parameter.Value = value == null ? (object)DBNull.Value : (object)SqlGeometry.Parse(value.AsText()); if (parameter is SqlParameter) { ((SqlParameter)parameter).UdtTypeName = "GEOMETRY"; } } /// /// Parse a database value back to a typed value /// /// The value from the database /// The typed value public override DbGeometry Parse(object value) { return (value == null || value is DBNull) ? null : DbGeometry.FromText(value.ToString()); } } }