展开时,导航属性中的OData Complex类型为null

时间:2019-08-10 22:31:54

标签: c# entity-framework asp.net-core entity-framework-core odata

我具有以下结构

public class Relationship
{
    public Guid RelationshipId { get; set; }

    public Guid LeadObjectId { get; set; }

    public Guid MemberObjectId { get; set; }

    public Object LeadObject { get; set; }

    public Object MemberObject { get; set; }
}

public class Object
{
    public Guid ObjectId { get; set; }

    public ObjectDetail Detail { get; set; }
}

public class ObjectDetail
{
    public Status Status { get; set; }
}

public enum Status
{
}

此处RelationshipObject是实体,其中Relationship具有通过ObjectLeadObjectMemberObject的导航属性。 Object具有复杂类型Detail的复杂属性ObjectDetail

我将Entity Framework Core作为我的ORM与Asp.net core odata结合使用。

我对Relationship的EF配置是

        protected override void ConfigureEntity(EntityTypeBuilder<Relationship> builder)
        {
            // omitted

            builder.OwnsOne(e => e.Detail, b =>
            {
                b.Property(e => e.Status).HasColumnName("Status");
            });
        }

Object

        protected override void ConfigureEntity(EntityTypeBuilder<Object> builder)
        {
            // omitted

            builder.OwnsOne(e => e.Detail, b =>
            {
                b.Property(e => e.Status).HasColumnName("Status");
            });
        }

一切似乎都很好。当我请求对象时,我可以看到Detail属性,并且可以看到它已被设置为复杂类型。

        <ComplexType Name="ObjectDetail">
            <Property Name="Status" Type="Namespace.ModelItemStatus" Nullable="false" />
        </ComplexType>

但是,当我请求关系时,我会展开导航对象属性之一,例如/relationships?$expand=LeadObject,然后复杂明细属性为null:

{
    "RelationshipId": "",
    "LeadObjectId": "",
    "MemberObjectId": "",
    "LeadObject": {
        "ObjectId": "",
        "Detail": null
    }
}

我不知道为什么,该配置看起来相当简单和明智,并且似乎设置正确。

但是,如果我然后$select在扩展对象上的detail属性,那么我会看到它!因此,有了这个/relationships?$expand=LeadObject($select=Detail),我可以看到详细信息:

{
    "RelationshipId": "",
    "LeadObjectId": "",
    "MemberObjectId": "",
    "LeadObject": {
        "Detail": {
            "Status": "CanSeeThisNow"
        }
    }
}

为什么?

0 个答案:

没有答案