Тип пространственной геометрии NHibernate становится NULL, если линия содержит только две точки с одинаковыми координатами - PullRequest
0 голосов
/ 24 марта 2011

У меня есть такой класс:

public class Edge
{
    public virtual Guid IDEdge { get; set; }
    public virtual Node Source { get; set; }
    public virtual Node Target { get; set; }
    public virtual double Length { get; set; }
    public virtual byte Car { get; set; }
    public virtual byte CarReverse { get; set; }
    public virtual IGeometry Geometry { get; set; }
}

... и свободное отображение:

public class EdgeMap : ClassMap<Edge>
{
    public EdgeMap()
    {
        Table("Edges");
        LazyLoad();
        Id(x => x.IDEdge).GeneratedBy.GuidComb().Column("IDEdge");
        References(x => x.Source).Column("Source");
        References(x => x.Target).Column("Target");
        Map(x => x.Length).Not.Nullable().Column("Length");
        Map(x => x.Car).Not.Nullable().Column("Car");
        Map(x => x.CarReverse).Not.Nullable().Column("CarReverse");
        Map(x => x.Geometry).CustomType<MsSql2008GeometryType>().Not.Nullable().Column("Geom");
    }
}

Я попытался вставить ребро с геометрией:

LINESTRING(37.2686 55.739,37.2686 55.739)

(две точки с одинаковыми координатами)

У меня есть:

not-null property references a null or transient value Edge.Geometry

Где-то экземпляр класса Geometry был потерян. Край вставляется успешно, если линия содержит разные точки.

1 Ответ

0 голосов
/ 22 сентября 2011

В SQL Server есть ограничение: у LineString должно быть как минимум две разные точки.См. http://technet.microsoft.com/en-us/library/bb895372.aspx

NHibernate.Spatial в настоящее время не создает правильное исключение для подобных случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...