【问题标题】:Problem with DTO in Azure serializationAzure 序列化中的 DTO 问题
【发布时间】:2011-03-22 09:13:38
【问题描述】:

首先我想为我的英语道歉

我的 DTO 有问题,我将 SQLAzure 用于我的数据库并在 Azure 上托管服务

我的一些对象有其他对象的 ICollection,通常一个国家(国家表)有一个机场集合(机场表),我使用 Entity Framework for DB Connection 和 DTO 来呈现我的对象

这一点一切都很好,但是在客户端,当我想使用对象的属性 Icollection 时,VS 说“名称不明确”,似乎在序列化过程中它重新键入了我的对象

我在服务器端有 DTOAirport

序列化后我在客户端有两种机场 首先是 airportservice.airportClient.DTOAirport 其次是 countryService.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,我使用映射器将其映射到实体框架类

这是服务器端的典型服务

        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 上工作的时间并不长

【问题讨论】:

  • 我认为需要某种代码围绕它说“模糊名称”...包括调用成员的代码和成员声明(s)它/他们自己
  • 版:我加了一些示例代码
  • 有了这些消息,它看起来就像你有一个“服务参考”没有重用现有的类型,即你有本地的 DTO 和 通过服务引用上的代理对象添加的 DTO - 正确吗?
  • 我在服务器端和客户端都有 DTO
  • 正确的是,服务引用似乎应用了他的正确类型,即“serviceReferenceName.sreviceReferenceClient.DTOType”,而不仅仅是 DTOType

标签: .net azure azure-sql-database


【解决方案1】:

您的错误消息的路径包含“.oldversions”。

客户端和服务器有可能是两个不同的版本吗?

我还看到你有一个可以为空的 int,有时可以为空的类型可能是个问题。以防万一,您可以尝试不使用此字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2010-12-12
    相关资源
    最近更新 更多