WebAPI 和 Odata V4 问题:包含实体的 ComplexType
WebAPI AND Odata V4 issue: ComplexType containing Entities
我在复杂类型中添加关系时遇到以下错误。我该如何解决这个问题。我大吃一惊,读到这是 OData V3 的问题,但不是 OData V4 的问题。
复杂类型'Microsoft.OneIM.ActiveIncident.Contracts.IncidentImpact'通过属性'ImpactedServices'引用实体类型'Microsoft.OneIM.ActiveIncident.Contracts.ImpactedService'。
在 System.Web.OData.Builder.ODataConventionModelBuilder.MapComplexType(复杂类型配置复杂类型)
在 System.Web.OData.Builder.ODataConventionModelBuilder.MapType(StructuralTypeConfiguration edmType)
在 System.Web.OData.Builder.ODataConventionModelBuilder.AddComplexType(类型类型)
在 System.Web.OData.Builder.ODataConventionModelBuilder.ReconfigureEntityTypesAsComplexType(EntityTypeConfiguration[] 配置错误的 EntityTypes)
在 System.Web.OData.Builder.ODataConventionModelBuilder.RediscoverComplexTypes()
在 System.Web.OData.Builder.ODataConventionModelBuilder.GetEdmModel()
在 Microsoft.OneIM.ActiveIncident.Service.ModelBuilder.BuildIncidentModels() 在 c:\OneIM\EngSys\OneIM\ActiveIncident\src\Product\Service\Models\ModelBuilder.cs:line 42
在 Microsoft.OneIM.ActiveIncident.Service.WebApiConfig.Register(HttpConfiguration 配置)在 c:\OneIM\EngSys\OneIM\ActiveIncident\src\Product\Service\App_Start\WebApiConfig.cs:line 22
在 Microsoft.OneIM.ActiveIncident.ServiceHost.ApiStartup.Configuration(IAppBuilder appBuilder) 在 c:\OneIM\EngSys\OneIM\ActiveIncident\src\Product\ServiceHost\ApiStartup.cs:line 27
我的模型如下所示
public class Incident
{
public IncidentImpact Impact { get; set; }
}
[ComplexType]
public class IncidentImpact
{
public bool IsCustomerImpacting { get; set; }
public string SupportTicketId { get; set; }
public ICollection<ImpactedService> ImpactedServices { get; set; }
}
public class ImpactedService
{
public long Id { get; set; }
public long IncidentId { get; set; }
public Incident Incident { get; set; }
public long ServiceId { get; set; }
}
您必须通过 [key] 属性或在模型构建器中将键 属性 设置为
builder.EntitySet<Type>("Types").EntityType.HasKey(t => t.KeyProperty);
希望对您有所帮助。
虽然 OData 协议 V4 支持复杂类型包含实体作为导航属性,但 OData Lib 和 WebAPI OData 现在都没有实现此功能。
我在复杂类型中添加关系时遇到以下错误。我该如何解决这个问题。我大吃一惊,读到这是 OData V3 的问题,但不是 OData V4 的问题。
复杂类型'Microsoft.OneIM.ActiveIncident.Contracts.IncidentImpact'通过属性'ImpactedServices'引用实体类型'Microsoft.OneIM.ActiveIncident.Contracts.ImpactedService'。
在 System.Web.OData.Builder.ODataConventionModelBuilder.MapComplexType(复杂类型配置复杂类型) 在 System.Web.OData.Builder.ODataConventionModelBuilder.MapType(StructuralTypeConfiguration edmType) 在 System.Web.OData.Builder.ODataConventionModelBuilder.AddComplexType(类型类型) 在 System.Web.OData.Builder.ODataConventionModelBuilder.ReconfigureEntityTypesAsComplexType(EntityTypeConfiguration[] 配置错误的 EntityTypes) 在 System.Web.OData.Builder.ODataConventionModelBuilder.RediscoverComplexTypes() 在 System.Web.OData.Builder.ODataConventionModelBuilder.GetEdmModel() 在 Microsoft.OneIM.ActiveIncident.Service.ModelBuilder.BuildIncidentModels() 在 c:\OneIM\EngSys\OneIM\ActiveIncident\src\Product\Service\Models\ModelBuilder.cs:line 42 在 Microsoft.OneIM.ActiveIncident.Service.WebApiConfig.Register(HttpConfiguration 配置)在 c:\OneIM\EngSys\OneIM\ActiveIncident\src\Product\Service\App_Start\WebApiConfig.cs:line 22 在 Microsoft.OneIM.ActiveIncident.ServiceHost.ApiStartup.Configuration(IAppBuilder appBuilder) 在 c:\OneIM\EngSys\OneIM\ActiveIncident\src\Product\ServiceHost\ApiStartup.cs:line 27
我的模型如下所示
public class Incident
{
public IncidentImpact Impact { get; set; }
}
[ComplexType]
public class IncidentImpact
{
public bool IsCustomerImpacting { get; set; }
public string SupportTicketId { get; set; }
public ICollection<ImpactedService> ImpactedServices { get; set; }
}
public class ImpactedService
{
public long Id { get; set; }
public long IncidentId { get; set; }
public Incident Incident { get; set; }
public long ServiceId { get; set; }
}
您必须通过 [key] 属性或在模型构建器中将键 属性 设置为
builder.EntitySet<Type>("Types").EntityType.HasKey(t => t.KeyProperty);
希望对您有所帮助。
虽然 OData 协议 V4 支持复杂类型包含实体作为导航属性,但 OData Lib 和 WebAPI OData 现在都没有实现此功能。