NHibernate空间几何类型变为NULL是行只包含两个具有相同坐标的点

时间:2011-03-24 11:06:25

标签: nhibernate geometry geospatial fluent

我有这样的课程:

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 :(得分:0)

SQL Server中存在限制:LineString必须至少有两个不同的点。见http://technet.microsoft.com/en-us/library/bb895372.aspx

NHibernate.Spatial目前没有为这样的案件抛出适当的例外。