Entity Framework: SqlGeography vs DbGeography

В чем разница или цель этих двух объектов, которые представляют один и тот же тип данных географии в базе данных Microsoft SQL?

System.Data.Entity.Spatial.DbGeography

и

Microsoft.SqlServer.Types.SqlGeography

Их нельзя отличить друг от друга, но SqlGeography имеет дополнительную команду, когда дело доходит до создания точек, полигонов и т.д.

Я думаю, что System.Data.Entity используется только для Entity Framework, а Microsoft.SqlServer используется при использовании SqlCommand непосредственно вместо этого?

Ответ 1

Вы правы, по сути, это так просто. DbGeography - это просто заглушенная версия SqlGeography, предназначенная для работы в Entity Framework. В нем реализованы самые популярные методы SqlGeography, но, как вы правильно отметили, не все.

В то время как два типа не могут быть напрямую связаны между собой, процесс их преобразования относительно прост в моменты, когда требуется дополнительная функциональность SqlGeography.

Например:

SqlGeography geog1 = SqlGeography.STPolyFromText('<coords>', srid);
SqlGeography geog2;
DbGeography dbGeog;

// SqlGeography to DbGeography
dbGeog = DbGeography.FromText(geog1.ToString(), srid);
// DbGeography to SqlGeography
geog2 = SqlGeography.Parse(dbGeog.AsText());