powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Работа с данными типа Geography MS SQL в C#
71 сообщений из 71, показаны все 3 страниц
Работа с данными типа Geography MS SQL в C#
    #39650114
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, ребята!

Пытаюсь с помощью Entity.Framework сделать запрос на выгрузку данных из таблицы БД MS SQL с помощью следующего кода:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private static List<GeographicalKoordinates> GetGeographicalKoordinatesEf()
        {
            var context = new Database_fast_waterEntities();
            IQueryable<GeographicalKoordinates> query = context.GeographicalKoordinates;
            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);//Согласно инструкции использования
                                                                                                 //Microsoft.SqlServer.Types прописал 
                                                                                                 //дан стр перед выполнением пространственных операций
            List<GeographicalKoordinates> listGeographicalKoordinates = query.ToList();
            return listGeographicalKoordinates;
        }



Но в 8-ой строке при выполнение данного кода выдаёт исключение:
"System.InvalidOperationException: "Spatial types and functions are not available for this provider because the assembly 'Microsoft.SqlServer.Types' version 10 or higher could not be found. ""

Библиотеку 'Microsoft.SqlServer.Types' с помощью Nuget загрузил и директиву "using Microsoft.SqlServer.Types;" прописал.
В самом коде перед записью данных из таблицы в список как требовалось по инструкции ("For desktop applications, add the following line of code to run before any spatial operations are performed:") прописал следующий код - строка 5.

Продолжает выдавать исключение "Spatial types and functions are not available for this provider because the assembly 'Microsoft.SqlServer.Types' version 10 or higher could not be found. ""

Подскажите пожалуйста, что сделал не верно, как исправить?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39650244
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39650280
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, спасибо, но проблема не устранена. Возможно я не там прописываю инструкции "SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);" и "SqlProviderServices.SqlServerTypesAssemblyName =
"Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";".
У меня в проекте C# Windows Forms нет класса Default.aspx.cs и я прописываю эти инструкции непосредственно в функции, которая выполняет запрос, возможно это не верно. Как правильно я не знаю (. И ещё вопрос, что это за ключ - "PublicKeyToken=89845dcd8080cc91"? В информации к пакету в NuGet такой информации не нашёл, поэтому просто написал тоже самое.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39650763
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продолжаю пытаться что-то сделать что бы заработало. Залез в ссылки проекта, нашёл там ссылку на "Microsoft.SqlServer.Types", в свойствах увидел, что параметр "Внедрить типы взаимодействия" - False, попробовал поставить True. Теперь выдает следующие 2 ошибки:

1) Ошибка CS1747 Не удается внедрить типы взаимодействия из сборки "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" из-за отсутствия в ней атрибута "System.Runtime.InteropServices.GuidAttribute";

2) Ошибка CS1759 Внедрение типов взаимодействия из сборки "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" невозможно, так как у нее отсутствует атрибут "System.Runtime.InteropServices.ImportedFromTypeLibAttribute" или атрибут "System.Runtime.InteropServices.PrimaryInteropAssemblyAttribute".
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39650766
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В классе сущности, который C# сформировал автоматически по таблицы из БД данный тип отображается вот так:

public System.Data.Entity.Spatial.DbGeography Koordinate { get; set; }

Может тут нужен какой-то другой подход?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39650774
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirВ классе сущности, который C# сформировал автоматически по таблицы из БД данный тип отображается вот так:

public System.Data.Entity.Spatial.DbGeography Koordinate { get; set; }

Может тут нужен какой-то другой подход?чем сформировали? Edmx файл?

Vlad__i__mirМожет тут нужен какой-то другой подход?да. Например сделать не свой пример, а чей то из сети или книжки. Потом уже свой.
Еще можно пользовательский тип ОРМ. Это уже вручную сделать любой свой тип.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39651180
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123чем сформировали? Edmx файл?

да. Например сделать не свой пример, а чей то из сети или книжки. Потом уже свой.
Еще можно пользовательский тип ОРМ. Это уже вручную сделать любой свой тип.

Классы сущности сформировал автоматически с помощью Entity Framework 6.0.0 (ПКМ по проекту - Добавить - Создать элемент - Модель ADO.NET EDM). Вот он целиком (.cs):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
namespace Project_fast_water_TestLINQ_
{
    using System;
    using System.Collections.Generic;
    using Microsoft.SqlServer.Types;
    public partial class GeographicalKoordinates
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public GeographicalKoordinates()
        {
            this.Basin = new HashSet<Basin>();
            this.Locality = new HashSet<Locality>();
            this.Post = new HashSet<Post>();
            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
        }
    
        public int Id_GeographicalKoordinates { get; set; }
        public System.Data.Entity.Spatial.DbGeography Koordinate { get; set; }
        public Nullable<int> SRID { get; set; }
        public Nullable<int> RadiusAction { get; set; }
        public System.Data.Entity.Spatial.DbGeography AllKoordinatesArea { get; set; }
        public string KoordinateText { get; set; }
        public string AllKoordinatesAreaTxt { get; set; }
        public Nullable<int> HeighSeaLevel { get; set; }
        public string description { get; set; }
        public string TypeKoordinates { get; set; }
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Basin> Basin { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Locality> Locality { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Post> Post { get; set; }
    }
}



Так я и делал функцию на выгрузку по примеру из сети, только там не было типа Географфи и всё работало, а у меня он есть и поэтому выдаёт ошибку.

Что за тип ОРМ? В интернете почитал, там написано, что типы Географфи и Геометри Entity Framework поддерживаются с 5-ой версии да и в классе сущностион всё верно автоматически сформировал.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39651260
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirтам не было типа Географфи
Я имел ввиду найти как раз пример с данным типом.
Неужели ни одного примера?
Про "Пользовательские типы", они в хибернейте есть. Тебе будет сложно.
В EF вроде нет таких.
Там можно свой тип сделать.
Ещё вариант, сделать запрос и получить байтовый массив.
Типа у меня в постгри
Select st_asBinary(geometry....
Цикл
(byte[])reader.GetValue(0)
....
Ищи пример в сети.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39651262
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL-сервер то у вас какой версии?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39651263
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39651264
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и вот это посмотрите, там всё подробненько с нюансами:
https://weblog.west-wind.com/posts/2012/Jun/21/Basic-Spatial-Data-with-SQL-Server-and-Entity-Framework-50
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652469
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_OneSQL-сервер то у вас какой версии?

2017
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652483
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ищите по версии сервера тогда, может баг какой и патч нужно ставить
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652496
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneну и вот это посмотрите, там всё подробненько с нюансами:
https://weblog.west-wind.com/posts/2012/Jun/21/Basic-Spatial-Data-with-SQL-Server-and-Entity-Framework-50

Вроде всё тоже самое.
Вот описание сущностей с примера:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public class GeoLocationContext : DbContext
    {
        public DbSet<GeoLocation> Locations { get; set; }
    }

    public class GeoLocation
    {
        public int Id { get; set; }
        public DbGeography Location { get; set; }
        public string Address { get; set; }
    }



Вот моё:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
public partial class Database_fast_waterEntities : DbContext
    {
        public Database_fast_waterEntities()
            : base("name=Database_fast_waterEntities")
        {

        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Basin> Basin { get; set; }
        public virtual DbSet<Flood> Flood { get; set; }
        public virtual DbSet<GeographicalKoordinates> GeographicalKoordinates { get; set; }
        public virtual DbSet<Ground> Ground { get; set; }
        public virtual DbSet<Locality> Locality { get; set; }
        public virtual DbSet<LocalityAndBasin> LocalityAndBasin { get; set; }
        public virtual DbSet<Post> Post { get; set; }
        public virtual DbSet<PostAndLocality> PostAndLocality { get; set; }
        public virtual DbSet<SolarActivity> SolarActivity { get; set; }
        public virtual DbSet<sysdiagrams> sysdiagrams { get; set; }
        public virtual DbSet<AvgSpeedLevelSnow> AvgSpeedLevelSnow { get; set; }
        public virtual DbSet<AvgSpeedLevelWater> AvgSpeedLevelWater { get; set; }
    
        public virtual int InputGeographyKoordinates(string koordinate, Nullable<int> sRID, string typeKoordinates, Nullable<int> radiusAction, Nullable<int> heighSeaLevel, string description)
        {
            var koordinateParameter = koordinate != null ?
                new ObjectParameter("Koordinate", koordinate) :
                new ObjectParameter("Koordinate", typeof(string));
    
            var sRIDParameter = sRID.HasValue ?
                new ObjectParameter("SRID", sRID) :
                new ObjectParameter("SRID", typeof(int));
    
            var typeKoordinatesParameter = typeKoordinates != null ?
                new ObjectParameter("TypeKoordinates", typeKoordinates) :
                new ObjectParameter("TypeKoordinates", typeof(string));
    
            var radiusActionParameter = radiusAction.HasValue ?
                new ObjectParameter("RadiusAction", radiusAction) :
                new ObjectParameter("RadiusAction", typeof(int));
    
            var heighSeaLevelParameter = heighSeaLevel.HasValue ?
                new ObjectParameter("HeighSeaLevel", heighSeaLevel) :
                new ObjectParameter("HeighSeaLevel", typeof(int));
    
            var descriptionParameter = description != null ?
                new ObjectParameter("description", description) :
                new ObjectParameter("description", typeof(string));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("InputGeographyKoordinates", koordinateParameter, sRIDParameter, typeKoordinatesParameter, radiusActionParameter, heighSeaLevelParameter, descriptionParameter);
        }
    
        public virtual int sp_alterdiagram(string diagramname, Nullable<int> owner_id, Nullable<int> version, byte[] definition)
        {
            var diagramnameParameter = diagramname != null ?
                new ObjectParameter("diagramname", diagramname) :
                new ObjectParameter("diagramname", typeof(string));
    
            var owner_idParameter = owner_id.HasValue ?
                new ObjectParameter("owner_id", owner_id) :
                new ObjectParameter("owner_id", typeof(int));
    
            var versionParameter = version.HasValue ?
                new ObjectParameter("version", version) :
                new ObjectParameter("version", typeof(int));
    
            var definitionParameter = definition != null ?
                new ObjectParameter("definition", definition) :
                new ObjectParameter("definition", typeof(byte[]));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_alterdiagram", diagramnameParameter, owner_idParameter, versionParameter, definitionParameter);
        }
    
        public virtual int sp_creatediagram(string diagramname, Nullable<int> owner_id, Nullable<int> version, byte[] definition)
        {
            var diagramnameParameter = diagramname != null ?
                new ObjectParameter("diagramname", diagramname) :
                new ObjectParameter("diagramname", typeof(string));
    
            var owner_idParameter = owner_id.HasValue ?
                new ObjectParameter("owner_id", owner_id) :
                new ObjectParameter("owner_id", typeof(int));
    
            var versionParameter = version.HasValue ?
                new ObjectParameter("version", version) :
                new ObjectParameter("version", typeof(int));
    
            var definitionParameter = definition != null ?
                new ObjectParameter("definition", definition) :
                new ObjectParameter("definition", typeof(byte[]));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_creatediagram", diagramnameParameter, owner_idParameter, versionParameter, definitionParameter);
        }
    
        public virtual int sp_dropdiagram(string diagramname, Nullable<int> owner_id)
        {
            var diagramnameParameter = diagramname != null ?
                new ObjectParameter("diagramname", diagramname) :
                new ObjectParameter("diagramname", typeof(string));
    
            var owner_idParameter = owner_id.HasValue ?
                new ObjectParameter("owner_id", owner_id) :
                new ObjectParameter("owner_id", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_dropdiagram", diagramnameParameter, owner_idParameter);
        }
    
        public virtual ObjectResult<sp_helpdiagramdefinition_Result> sp_helpdiagramdefinition(string diagramname, Nullable<int> owner_id)
        {
            var diagramnameParameter = diagramname != null ?
                new ObjectParameter("diagramname", diagramname) :
                new ObjectParameter("diagramname", typeof(string));
    
            var owner_idParameter = owner_id.HasValue ?
                new ObjectParameter("owner_id", owner_id) :
                new ObjectParameter("owner_id", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_helpdiagramdefinition_Result>("sp_helpdiagramdefinition", diagramnameParameter, owner_idParameter);
        }
    
        public virtual ObjectResult<sp_helpdiagrams_Result> sp_helpdiagrams(string diagramname, Nullable<int> owner_id)
        {
            var diagramnameParameter = diagramname != null ?
                new ObjectParameter("diagramname", diagramname) :
                new ObjectParameter("diagramname", typeof(string));
    
            var owner_idParameter = owner_id.HasValue ?
                new ObjectParameter("owner_id", owner_id) :
                new ObjectParameter("owner_id", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<sp_helpdiagrams_Result>("sp_helpdiagrams", diagramnameParameter, owner_idParameter);
        }
    
        public virtual int sp_renamediagram(string diagramname, Nullable<int> owner_id, string new_diagramname)
        {
            var diagramnameParameter = diagramname != null ?
                new ObjectParameter("diagramname", diagramname) :
                new ObjectParameter("diagramname", typeof(string));
    
            var owner_idParameter = owner_id.HasValue ?
                new ObjectParameter("owner_id", owner_id) :
                new ObjectParameter("owner_id", typeof(int));
    
            var new_diagramnameParameter = new_diagramname != null ?
                new ObjectParameter("new_diagramname", new_diagramname) :
                new ObjectParameter("new_diagramname", typeof(string));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_renamediagram", diagramnameParameter, owner_idParameter, new_diagramnameParameter);
        }
    
        public virtual int sp_upgraddiagrams()
        {
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("sp_upgraddiagrams");
        }
    
        public virtual int UpdateGeographyKoordinates(string koordinate, Nullable<int> sRID, string typeKoordinates, Nullable<int> radiusAction, Nullable<int> heighSeaLevel, string description, Nullable<int> id_GeographicalKoordinates)
        {
            var koordinateParameter = koordinate != null ?
                new ObjectParameter("Koordinate", koordinate) :
                new ObjectParameter("Koordinate", typeof(string));
    
            var sRIDParameter = sRID.HasValue ?
                new ObjectParameter("SRID", sRID) :
                new ObjectParameter("SRID", typeof(int));
    
            var typeKoordinatesParameter = typeKoordinates != null ?
                new ObjectParameter("TypeKoordinates", typeKoordinates) :
                new ObjectParameter("TypeKoordinates", typeof(string));
    
            var radiusActionParameter = radiusAction.HasValue ?
                new ObjectParameter("RadiusAction", radiusAction) :
                new ObjectParameter("RadiusAction", typeof(int));
    
            var heighSeaLevelParameter = heighSeaLevel.HasValue ?
                new ObjectParameter("HeighSeaLevel", heighSeaLevel) :
                new ObjectParameter("HeighSeaLevel", typeof(int));
    
            var descriptionParameter = description != null ?
                new ObjectParameter("description", description) :
                new ObjectParameter("description", typeof(string));
    
            var id_GeographicalKoordinatesParameter = id_GeographicalKoordinates.HasValue ?
                new ObjectParameter("Id_GeographicalKoordinates", id_GeographicalKoordinates) :
                new ObjectParameter("Id_GeographicalKoordinates", typeof(int));
    
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("UpdateGeographyKoordinates", koordinateParameter, sRIDParameter, typeKoordinatesParameter, radiusActionParameter, heighSeaLevelParameter, descriptionParameter, id_GeographicalKoordinatesParameter);
        }
    }
}

public partial class GeographicalKoordinates
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public GeographicalKoordinates()
        {
            this.Basin = new HashSet<Basin>();
            this.Locality = new HashSet<Locality>();
            this.Post = new HashSet<Post>();
            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
        }
    
        public int Id_GeographicalKoordinates { get; set; }
        public System.Data.Entity.Spatial.DbGeography Koordinate { get; set; }
        public Nullable<int> SRID { get; set; }
        public Nullable<int> RadiusAction { get; set; }
        public System.Data.Entity.Spatial.DbGeography AllKoordinatesArea { get; set; }
        public string KoordinateText { get; set; }
        public string AllKoordinatesAreaTxt { get; set; }
        public Nullable<int> HeighSeaLevel { get; set; }
        public string description { get; set; }
        public string TypeKoordinates { get; set; }
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Basin> Basin { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Locality> Locality { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Post> Post { get; set; }
    }
}



Смущает лишь то, что у меня EF все методы обозначил виртуальными, следовательно они где-то могут ещё описываться, а вот где? В проекте нет.

Вот выгрузка данных из примера, вот только в ней не выгружается поле с типом Geography, а берётся только одно поле:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
[TestMethod]
public void QueryLocationsTest()
{
    var sourcePoint = CreatePoint(45.712113, -121.527200);

    var context = new GeoLocationContext();

    // find any locations within 5 kilometers ordered by distance
    var matches = 
        context.Locations
                .Where(loc => loc.Location.Distance(sourcePoint) < 5000)
                .OrderBy( loc=> loc.Location.Distance(sourcePoint) )
                .Select( loc=> new { Address = loc.Address, Distance = loc.Location.Distance(sourcePoint) });

    Assert.IsTrue(matches.Count() > 0);

    foreach (var location in matches)
    {
        Console.WriteLine("{0} ({1:n0} meters)", location.Address, location.Distance);
    }
}



Вот моя:
Код: c#
1.
2.
3.
4.
5.
6.
7.
        private static List<GeographicalKoordinates> GetGeographicalKoordinatesEf()
        {
            var context = new Database_fast_waterEntities();
            IQueryable<GeographicalKoordinates> query = context.GeographicalKoordinates;
            List<GeographicalKoordinates> listGeographicalKoordinates = query.ToList();
            return listGeographicalKoordinates;
        }



Но у меня выдает ошибку, и судя потому, что ошибка возникает на строке
Код: c#
1.
List<GeographicalKoordinates> listGeographicalKoordinates = query.ToList();

,
если я правильно понял ошибка на стадии преобразования уже полученных по запросу данных в List
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652526
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirВот моё:не твоё, а короткий пример по ссылке работает?
Один в один из демки?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652544
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_OneSQL-сервер то у вас какой версии?

Ещё вопрос по поводу сервера. В Windows (Панели управления - Программы и компоненты) указано кроме Microsoft SQL Server 2017, ещё Microsoft SQL Server 2012 Native Client, Microsoft SQL Servera 2012 Native Client, Microsoft System CLR Types для SQL Servera 2014, Microsoft SQL Server 2016 LocalDb и ещё ... (в файле скрин со всеми этими названиями)

Так вот что же это? Я просто начал сомневаться, что у меня именно Microsoft SQL Server 2017 (
[img=]
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652549
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Vlad__i__mirВот моё:не твоё, а короткий пример по ссылке работает?
Один в один из демки?

Пример по ссылке я не реализовывал, там нужно БД делать, а у меня она уже готовая и в примере нет выгрузки записей с полем типа Geography, а выводится только одно поле типа string, а у меня ошибка именно с Geography
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652577
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
Вот ты упрямый.
Я глянул 10 сек ссылку. Там работа с геометрическим полем.
Неважно вырузка или вгрузка.
Если демка та работает, то один разговор. Если ет, то другой.
Зы.
Версию сервера смотреть не там, а отпраить запрос к серверу.
Select version или как там, не помню.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652579
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в SSMS надо выполнить (версия сервера):
Код: sql
1.
Select @@VERSION



у базы данных есть понятие уровня совместимости, проверьте, что у вас там (см. настройки базы)

PS
и сделайте полную установку 2017 SQL, а то у вас клиентская часть стоит от 2012 сервера
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652582
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneполную установку 2017 SQLда. Геометрические приблуды обычно отдельно галки указыват при установке.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652585
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Vlad__i__mirВот моё:не твоё, а короткий пример по ссылке работает?
Один в один из демки?

Попробовал на своём примере сделать прямо как у них:
private static GeographicalKoordinates GetGeographicalKoordinatesEf()
{
var context = new Database_fast_waterEntities();
var query = context.GeographicalKoordinates.First();
return query;
}

Выдаёт ошибку уже при запросе в 4-ой строке ((:
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652601
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Сделал запрос версия 2017: Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows 8.1 Pro 6.3 <X64> (Build 9600: )
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652602
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirПопробовал на своём примере сделать прямо как у них:вот и не показывай свои простыни код пока не заработает демка в 4 строки. Ставь сервер. Геопрограммирование это не просто.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652609
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
автори сделайте полную установку 2017 SQL, а то у вас клиентская часть стоит от 2012 сервера

Вроде делал полною, и MS SQL Manager Studio 2017 установлена, через неё работаю.
Можно ли как-то аккуратно выполнить полную установку 2017 SQL, что бы ничего не полетело? Если да, то как?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652615
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
авторвот и не показывай свои простыни код пока не заработает демка в 4 строки. Ставь сервер. Геопрограммирование это не просто.

Так а что с сервером не так, что сносить его и заново переустанавливать?

авторда. Геометрические приблуды обычно отдельно галки указыват при установке.

Не спрашивало. Можно эти настройки посмотреть через MS SQL Manager Studio 2017?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652620
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Konst_Oneполную установку 2017 SQLда. Геометрические приблуды обычно отдельно галки указыват при установке.

При создании БД он поддерживал же данный тип данных и сам предлагал его в списке доступных
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652626
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
Выше две ссылки с примерами. Почему не делаем? Причем тут версия сервера?
Удачи!
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652693
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Vlad__i__mir,
Вот ты упрямый.
Я глянул 10 сек ссылку. Там работа с геометрическим полем.
Неважно вырузка или вгрузка.
Если демка та работает, то один разговор. Если ет, то другой.
Зы.
Версию сервера смотреть не там, а отпраить запрос к серверу.
Select version или как там, не помню.

Решил последовать твоему совету и реализовать пример из 2-ой ссылки.
EF выдал предупреждение:
Предупреждение Ошибка 6002: В таблице или представлении "TestGeography.dbo.Geo" не определен первичный ключ. Ключ был выведен, а определение таблицы или представления было создано в режиме только для чтения. ProjectTestGeography D:\Учеба ФМИТ 2 курс\ОЯиС\ProjectTestGeography\ProjectTestGeography\TestGeography.edmx 1

Ну это ладно. После реализации всего и запуска выдало вот такое исключение (
[img=]
И мне ещё показалось странным, что в БД он создает таблицу с полями:
Код: sql
1.
2.
3.
4.
[id] [int] IDENTITY(1,1) NOT NULL,
    [Location] [geography] NULL,
    [Long] [float] NOT NULL,
    [Lat] [float] NOT NULL

,
а класс с полями
public class GeoLocation
{
public int Id { get; set; }
public DbGeography Location { get; set; }
public string Address { get; set; }
}
Попробовал это исправить, но результат тот же.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652717
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
Руками в бд делать таблу, а edmx это классы по табле.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652732
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Vlad__i__mir,
Руками в бд делать таблу, а edmx это классы по табле.

Так я все БД руками и делал, а потом уже создавал проект C# соединял его с БД и с помощью EF автоматически формировал классы по БД
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652738
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вас не смущает, что сущности разные?

Код: c#
1.
2.
3.
4.
5.
6.
public class GeoLocation
{
public int Id { get; set; }
public DbGeography Location { get; set; }
public string Address { get; set; }
}



Код: sql
1.
2.
3.
4.
[id] [int] IDENTITY(1,1) NOT NULL,
    [Location] [geography] NULL,
    [Long] [float] NOT NULL,
    [Lat] [float] NOT NULL
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652759
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
авторвас не смущает, что сущности разные?
Конечно смутила, вот что я ранее писал об этом:
авторНу это ладно. После реализации всего и запуска выдало вот такое исключение (
[img=]
И мне ещё показалось странным, что в БД он создает таблицу с полями:
[id] [int] IDENTITY(1,1) NOT NULL,
[Location] [geography] NULL,
[Long] [float] NOT NULL,
[Lat] [float] NOT NULL
,
а класс с полями
public class GeoLocation
{
public int Id { get; set; }
public DbGeography Location { get; set; }
public string Address { get; set; }
}
Попробовал это исправить, но результат тот же.

Вот как пробовал переделывать класс сущность:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public partial class GeoLocation
    {
        public int id { get; set; }
        public System.Data.Entity.Spatial.DbGeography Location { get; set; }
        public double Long { get; set; }
        public double Lat { get; set; }
        public string Address { get; set; }
    }
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652763
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One, ошибка та же
[img=]
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39652888
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
Проблемы решать по мере поступления.
- убрать геометрическое поле и добиться чтобы генерируемый класс соответствовал табле в бд.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653126
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то странно вы работаете со своей табличкой Location.
вы сначала просто выборку сделайте, пример же у вас был выше
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653129
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и проверьте настройки строки соединения в своём конфиге, может вы провайдер выбрали неверный
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653319
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Если я уберу геометрическре поле, то генерируемый класс не будет соответствовать БД, а приводить класс в соответствии с таблицей БД я уже пробовал, выше писал об этом - результат тот же
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653343
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
авторчто-то странно вы работаете со своей табличкой Location.
вы сначала просто выборку сделайте, пример же у вас был выше

И обычную выгрузку я пробовал, тоже самое исключение, что и на предыдущем скрине:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
private static List<Geo> GetGeographicalKoordinatesEf()
        {
            var context = new GeoLocationTest();
            IQueryable<Geo> query = context.Locations;
           
            List<Geo> listGeographicalKoordinates = query.ToList();
            return listGeographicalKoordinates;
        }
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653349
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
автори проверьте настройки строки соединения в своём конфиге, может вы провайдер выбрали неверный

Всё нормально с ним - "providerName="System.Data.EntityClient"". В моём примере таблицы не имеющие тип Geography выгружаются с этим провайдером без проблем.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653366
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirPetro123,
Если я уберу геометрическре поле, то генерируемый класс не будет соответствовать БД, а приводить класс в соответствии с таблицей БД я уже пробовал, выше писал об этом - результат тот же
Не понял.
В бд сделать копию таблицы без поля и протестить.
30 минут времени.
Работаем!
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653370
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот вам про это:

Код: c#
1.
2.
3.
  <connectionStrings>
    <add name="Entities" connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=servername;initial catalog=databasename;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653371
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
Еще раз перечитал.
Не врубаюсь.
Ты без поля покажи таблу dml и класс после генерации.
Потом тоже самое добавив поле.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653376
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
Install-Package Microsoft.SqlServer.Types
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653379
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и это в конфиг:

Код: c#
1.
2.
3.
4.
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="10.0.0.0-11.0.0.0" newVersion="14.0.0.0" />
    </dependentAssembly>
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653433
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
авторТы без поля покажи таблу dml и класс после генерации.
Потом тоже самое добавив поле.

Вот это без поля Geography -работает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
namespace TestWithoutGeography
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    public partial class TestGeography2Entities : DbContext
    {
        public TestGeography2Entities()
            : base("name=TestGeography2Entities")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Geo> Geos { get; set; }
    }
}

namespace TestWithoutGeography
{
    using System;
    using System.Collections.Generic;
    
    public partial class Geo
    {
        public int id { get; set; }
        public double Long { get; set; }
        public double Lat { get; set; }
    }
}

class Program
    {
        private static List<Geo> GetGeoEf()
        {
            var context = new TestGeography2Entities();
            IQueryable<Geo> query = context.Geos;
            List<Geo> listGeo = query.ToList();
            return listGeo;
        }
        static void Main(string[] args)
        {
            foreach (var x in GetGeoEf())
                Console.WriteLine(x.Lat + " " + x.Long + ";" + "\n");
        }
    }
}



Вот это с полем Geography - не работает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
namespace ProjectTestGeography
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    public partial class GeoLocationContext : DbContext
    {
        public GeoLocationContext()
            : base("name=TestGeographyEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Geo> Locations { get; set; }
    }
}

namespace ProjectTestGeography
{
    using System;
    using System.Collections.Generic;
    
    public partial class Geo
    {
        public int id { get; set; }
        public System.Data.Entity.Spatial.DbGeography Location { get; set; }
        public double Long { get; set; }
        public double Lat { get; set; }
    }
}

class Program
    {
private static List<Geo> GetGeographicalKoordinatesEf()
        {
            
            var context = new GeoLocationContext();
            IQueryable<Geo> query = context.Locations;
            List < Geo > listGeographicalKoordinates = query.ToList();
            return listGeographicalKoordinates;
        }
static void Main(string[] args)
        {
            foreach (var x in GetGeographicalKoordinatesEf())
                Console.WriteLine(x.Lat + " " + x.Long + ";" + "\n");
        }
    }
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653442
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mir,
Сделай один контекст для обоих примеров и убери статический метод.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653446
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
авторInstall-Package Microsoft.SqlServer.Types

Установил данный пакет через Nuget Manager. Скачалась версия "14.0.314.76".

автори это в конфиг:

В App.config прописал:
Код: c#
1.
2.
3.
4.
<dependentAssembly>
    <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
    <bindingRedirect oldVersion="10.0.0.0-11.0.0.0" newVersion="14.0.314.76" />
  </dependentAssembly>



Выдал следующею ошибку:
"System.TypeInitializationException: "Инициализатор типа "System.Data.Entity.Internal.AppConfig" выдал исключение."

ConfigurationErrorsException: Система конфигурации не прошла инициализацию

ConfigurationErrorsException: Неизвестный раздел конфигурации dependentAssembly."
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653449
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirВ App.config прописал:все удали и когда выберешь прова в меню Сгенерировать классы само должно прописаться.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653450
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
авторСделай один контекст для обоих примеров и убери статический метод.

Полностью одинаковый? Даже "base("name=TestGeographyEntities")"?

Убрать статический метод - это прописать код выгрузки в Main()?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653451
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirПолностью одинаковый? Даже "base("name=TestGeographyEntities")"?
В одной базе две таблы это один edmx и импорт туда две таблы.
Это один контекст.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653453
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirУбрать статический метод - это прописать код выгрузки в Main()?да.
И не выгрузки, а получить первое значение.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653479
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС, а ты молодец. Хоть и медленно, но пытаешься сделать и опробовать все варианты.
Если не выйдет, завтра сам попробую.
Хотя у меня не сиквел, а компакт и постгри.
Дело в провайдере скорее всего, если не вышло.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653489
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
авторвсе удали и когда выберешь прова в меню Сгенерировать классы само должно прописаться.

Удалил всё, снова сгенерировал классы сущности, правда я генерирую вот так: ПКМ по проекту - Добавить - Создать элемент - Модель ADO.NET EDM. Но он ни чего у меня не спрашивал, и опять не может найти этот пакет
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653493
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reference на сборку sqlserver.types в проект добавь
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653494
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
авторТС, а ты молодец. Хоть и медленно, но пытаешься сделать и опробовать все варианты.
Если не выйдет, завтра сам попробую.
Хотя у меня не сиквел, а компакт и постгри.
Дело в провайдере скорее всего, если не вышло.

Курсовая "горит", как тут не пытаться...
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653501
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
авторreference на сборку sqlserver.types в проект добавь

Прописать "using Microsoft.SqlServer.Types;" перед классом где функция? Это я сделал.

Или как-то по другому нужно?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653502
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что у меня в Конфиге:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
<connectionStrings><add name="TestGeographyEntities" connectionString="metadata=res://*/TestGeography.csdl|res://*/TestGeography.ssdl|res://*/TestGeography.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=home-pc;initial catalog=TestGeography;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /></connectionStrings></configuration>
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653503
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавь в проект через nuget
https://www.nuget.org/packages/Microsoft.SqlServer.Types/
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653505
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mssqllocaldb вот на счёт этого я не уверен, для большого SQL Server пробуй
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653512
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
автордобавь в проект через nuget

Через него я его и добавлял, он у меня в проект добавился. Вот что прописалось в packages.config:
Код: c#
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="6.2.0" targetFramework="net461" />
  <package id="EntityFramework.ru" version="6.1.3" targetFramework="net461" />
  <package id="Microsoft.SqlServer.Types" version="14.0.314.76" targetFramework="net461" />
</packages>



И соответственно в проекте появилась папка - "SqlServerTypes"
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653516
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
автордля большого SQL Server пробуй

Не понял, можно по подробней и доступнее?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39653537
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad__i__mirPetro123,
авторвсе удали и когда выберешь прова в меню Сгенерировать классы само должно прописаться.

Удалил всё, снова сгенерировал классы сущности, правда я генерирую вот так: ПКМ по проекту - Добавить - Создать элемент - Модель ADO.NET EDM. Но он ни чего у меня не спрашивал, и опять не может найти этот пакетпоищи в сети картинку.
Там же окошко с выбором прова и таблиц должно быть.
Как ты пару таблиц выберешь из 1500 таблиц в базе?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654115
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

авторВ одной базе две таблы это один edmx и импорт туда две таблы.
Это один контекст.

Вот пожалуйста:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
namespace TestGeography
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    public partial class TestGeographyEntities : DbContext
    {
        public TestGeographyEntities()
            : base("name=TestGeographyEntities")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Geo> Geos { get; set; }
        public virtual DbSet<WithoutGeo> WithoutGeos { get; set; }
    }
}

namespace TestGeography
{
    using System;
    using System.Collections.Generic;
    
    public partial class Geo
    {
        public int id { get; set; }
        public System.Data.Entity.Spatial.DbGeography Location { get; set; }
        public double Long { get; set; }
        public double Lat { get; set; }
    }
}

namespace TestGeography
{
    using System;
    using System.Collections.Generic;
    
    public partial class WithoutGeo
    {
        public int id { get; set; }
        public double Long { get; set; }
        public double Lat { get; set; }
    }
}



Так работает (таблица без типа Географи):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
static void Main(string[] args)
        {
            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
            var context = new TestGeographyEntities();
            IQueryable<WithoutGeo> query = context.WithoutGeos;
            List<WithoutGeo> listGeographicalKoordinates = query.ToList();

            foreach (var x in listGeographicalKoordinates)
                Console.WriteLine(x.Lat + " " + x.Long + ";" + "\n");
        }


Так не работает (таблица с типом Географи):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
static void Main(string[] args)
        {
            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
            var context = new TestGeographyEntities();
            IQueryable<Geo> query = context.Geos;
            List<Geo> listGeographicalKoordinates = query.ToList();

            foreach (var x in listGeographicalKoordinates)
                Console.WriteLine(x.Lat + " " + x.Long + ";" + "\n");
        }


Ошибка с типом данных та же самая
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654122
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
авторпоищи в сети картинку.
Там же окошко с выбором прова и таблиц должно быть.
Как ты пару таблиц выберешь из 1500 таблиц в базе?

Сделал скрины всего пути формирования классов
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654143
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654158
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One https://stackoverflow.com/questions/43330792/class-library-entity-framework-code-first-microsoft-sqlserver-types да. Я это читал. Там конечно жесть описана.
С такими заморочками я бы вообще отказался о типа и передавал Lat, Lon и потом в вычисляемом поле объединил в Point.
Даже не знаю, стоит ли теперь понедельник пробовать)).
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654182
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Моя версия SQL-сервера 11.0.6020.0, поэтому я установил 11.0.2 версию nuget-пакета. Это очень важно , чтобы соответствовать версии.

Может у меня не соответствие версий? Как определить версию SQL-сервера?

авторНаконец, вам потребуется переопределить SqlServerTypesAssemblyName свойства в SqlProviderServices статическом классе.

Как это сделать?

Код: c#
1.
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"



Где можно посмотреть "PublicKeyToken=89845dcd8080cc91"? Облазил вроде всё - не нашёл.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654185
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторSqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"

Где этот код прописывается?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654197
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

авторМоя версия SQL-сервера 11.0.6020.0, поэтому я установил 11.0.2 версию nuget-пакета. Это очень важно , чтобы соответствовать версии.

Если я правильно нашёл, то у меня версия SQL servera 14.1000.169. Учитывая, что "Microsoft.SqlServer.Types" version="14.0.314.76",
то противоречий версий не должно быть. Верно?
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39654402
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
авторНаконец, вам потребуется переопределить SqlServerTypesAssemblyName свойства в SqlProviderServices статическом классе.


Подскажи как это сделать?

Код: c#
1.
SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"



Где этот код прописывается? Где можно посмотреть "PublicKeyToken=89845dcd8080cc91"? Облазил вроде всё - не нашёл.
...
Рейтинг: 0 / 0
Работа с данными типа Geography MS SQL в C#
    #39656861
Vlad__i__mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема решена. Вопрос снимается.
...
Рейтинг: 0 / 0
71 сообщений из 71, показаны все 3 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Работа с данными типа Geography MS SQL в C#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]