我有这样的课程:
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类的实例已丢失。如果行包含不同的点,则边缘成功插入。
答案 0 :(得分:0)
SQL Server中存在限制:LineString必须至少有两个不同的点。见http://technet.microsoft.com/en-us/library/bb895372.aspx
NHibernate.Spatial目前没有为这样的案件抛出适当的例外。