#c# #sql #entity-framework #mongodb #mongodb-.net-driver
#c# #sql #entity-framework #mongodb #mongodb-.net-driver
Вопрос:
Во внешней библиотеке есть пара классов, которые имеют свойство Coordinate, которое иногда необходимо сохранять в MongoDB, а иногда и в SQL Server, в идеале с пространственными индексами, без необходимости изменять класс.
У MongoDB нет проблем с созданием геопространственного сферического индекса для свойства Coordinate с помощью следующего кода:
var collection = _database.GetCollection<SomeClass>("SomeCollection")
collection.CreateIndex(IndexKeys<SomeClass>.GeoSpatialSpherical(x => x.Coordinate));
Согласно документации, это создаст точку GeoJSON под обложками. Затем я могу запросить объект как таковой:
var point = GeoJson.Point(GeoJson.Geographic(coordinate.Longitude, coordinate.Latitude));
var geoClause = Query<SomeClass>.Near(x => x.Coordinate, point, distance);
return collection.AsQueryable().Where(x => geoClause.Inject())
Однако с SQL Server и EF для пространственного индекса потребуется свойство DbGeography.
Было бы неплохо, если бы в EF была точка расширения для сопоставления объекта с типом данных SQL, но поиск в Google не вернул ничего подобного. Существует ли такая вещь?
Я думал об универсальном классе-оболочке, но EF не поддерживает generics, так что это тоже не вариант, и я не хочу создавать оболочку для каждого класса.
Является ли мой единственный вариант расширения классов?