我具有以下结构
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
{
}
此处Relationship
和Object
是实体,其中Relationship
具有通过Object
和LeadObject
到MemberObject
的导航属性。 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"
}
}
}
为什么?