Проблема с DTO в сериализации Azure - PullRequest
1 голос
/ 22 марта 2011

сначала я хочу извиниться за мой английский

У меня проблема с 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 в целом

1 Ответ

1 голос
/ 09 мая 2011

Ваше сообщение об ошибке содержит путь, который включает в себя «.oldversions».

Есть ли вероятность того, что клиент и сервер имеют две разные версии?

Также я вижу, что у вас есть Nullableint, иногда обнуляемые типы могут быть проблемой.Вы можете попробовать это без этого поля на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...