сначала я хочу извиниться за мой английский
У меня проблема с DTO, я использую SQLAzure для своей БД и размещаю службы на Azure
Некоторые из моих объектов имеют ICollection других объектов, обычно в стране (Таблица стран) есть коллекция аэропортов (Таблица аэропортов), я использую Entity Framework для подключения к БД и DTO для представления моего объекта
А с этим все в порядке, но на стороне клиента, когда я хочу использовать свойство Icollection объекта, VS говорит "неоднозначное имя", кажется, что во время сериализации он повторно вводит мой объект
У меня DTOAirport на стороне сервера
У меня есть два вида аэропорта на стороне клиента после сериализации
Первый АэропортСервис.AirportClient.DTOAirport
вторая странаService.countryClient.DTOAirport
Я не могу использовать свой классический DTOAirport, и он не поддерживает приведение ...
У меня много проблем с этим, которых у меня нет на "классических сервисах WCF"
Я могу опубликовать код, если вы хотите
Большое спасибо, что читаете меня
{
[DataContract]
public class DTOAirport
{
[DataMember]
public int IdAirportDTO { get; set; }
[DataMember]
public string NameAirportDTO { get; set; }
[DataMember]
public string IATACodeDTO { get; set; }
[DataMember]
public string ICAOCodeDTO { get; set; }
[DataMember]
public string ZoneDTO { get; set; }
[DataMember]
public int FKCountryDTO { get; set; }
[DataMember]
public string CityDTO { get; set; }
[DataMember]
public double LatitudeDTO { get; set; }
[DataMember]
public double LongitudeDTO { get; set; }
[DataMember]
public Nullable<int> AltitudeDTO { get; set; }
}
* *} Тысяча двадцать-один
{
[DataContract]
public class DTOCountry
{
[DataMember]
public int IdCountryDTO { get; set; }
[DataMember]
public string NameCountryDTO { get; set; }
[DataMember]
public ICollection<DTOAirport> AirportsListDTO { get; set; }
}
}
Вот мои DTO, я использую маппер для отображения его на классы Entity Framework
это типичная служба на стороне сервера
public DTOAirport GetAirportById(int idAirport)
{
using (FlexAzureContainer1 context = new FlexAzureContainer1())
{
DTOAirport airport = new DTOAirport();
airport = DTOAirportMapper.MapFrom(context.DM_AIRPORTS.Where(a => a.IdAirport == idAirport).FirstOrDefault());
return airport;
}
}
public DTOCountry GetCountryById(int idCountry)
{
using (FlexAzureContainer1 context = new FlexAzureContainer1())
{
DTOCountry country = new DTOCountry();
country = DTOCountryMapper.MapFrom(context.DM_COUNTRIES.Where(c => c.IdCountry == idCountry).FirstOrDefault());
return country;
}
}
вот консольный тест на стороне клиента и ошибки, которые он мне дает
public class Program
{
static AirportService.AirportServiceClient myAirportService = new AirportService.AirportServiceClient();
static CountryService.CountryServiceClient myCountryService = new CountryService.CountryServiceClient();
public static void Main(string[] args)
{
List<DTOAirport>airportsList = myCountryService.GetCountryById(1).AirportsListDTO.ToList();
DTOCountry country = myCountryService.GetCountryById(1);
DTOAirport airport = myAirportService.GetAirportById(1);
foreach (DTOAirport airport2 in country.AirportsListDTO.ToList())
{
Console.WriteLine(airport2.NameAirportDTO);
}
Console.WriteLine(country.NameCountryDTO);
Console.WriteLine(airport.NameAirportDTO);
Console.ReadLine();
}
}
}
Error 1 Cannot implicitly convert type 'System.Collections.Generic.List<FlexinergieAircraft.Client.CountryService.DTOAirport>' to 'System.Collections.Generic.List<FlexinergieAircraft.Client.DTOAirport>' D:\Projects\FlexinergieAicraft.OldVersions\FlexinergieAircraft17\FlexinergieAircraft\FlexinergieAircraft.Client\FlexinergieAircraft.Client\Program.cs 17 45 FlexinergieAircraft.Client
Error 2 Cannot implicitly convert type 'FlexinergieAircraft.Client.CountryService.DTOCountry' to 'FlexinergieAircraft.Client.DTOCountry' D:\Projects\FlexinergieAicraft.OldVersions\FlexinergieAircraft17\FlexinergieAircraft\FlexinergieAircraft.Client\FlexinergieAircraft.Client\Program.cs 18 34 FlexinergieAircraft.Client
Error 3 Cannot implicitly convert type 'FlexinergieAircraft.Client.AirportService.DTOAirport' to 'FlexinergieAircraft.Client.DTOAirport' D:\Projects\FlexinergieAicraft.OldVersions\FlexinergieAircraft17\FlexinergieAircraft\FlexinergieAircraft.Client\FlexinergieAircraft.Client\Program.cs 19 34 FlexinergieAircraft.Client
Если вам нужно что-то еще
В этом примерном примере, который я тестирую с DTO на стороне клиента, результат был таким же, кажется, сервис повторно вводит объекты
Может быть, это прокси, но это не заставило меня долго работать на Azure и .NET в целом