OData虚拟导航属性的错误

时间:2020-04-24 11:31:54

标签: c# odata

我有一个父母和孩子班级:

public class SharedCarBundle : SharedEntity, ISharedCarBundle, ISharedEntity
    {
        public SharedCarBundle();

        public virtual SharedCar Car { get; set; }

    }

    public class CarBundle : SharedCarBundle, ISharedCarBundle, ICarAssigned
    {

          [Value]
        public new virtual Car Car { get; set; }

        /// <summary>
        /// The Car the bundle is of
        /// </summary>
        ISharedCar ISharedCarBundle.Car
        {
            get
            {
                return Car;
            }
            set
            {
                Car = (Car)value;
            }
        }
    }

在使用Odata获取请求时,我总是只获取父级属性的空值,而不是子类中Car prop中的原始值。

我在做什么错,应该怎么做才能获取正确的值? 注意:不能更改虚拟属性。

1 个答案:

答案 0 :(得分:0)

最后,我自己找到了解决方案。 问题是我从几个类继承而来,很明显,当在父类中虚拟定义了导航属性时,Odata将仅看到父类的null值,而不会在子类中识别出被覆盖的属性。

因此,我的建议是使用Odata时,请仅使用平面类结构;如果需要使用继承,请仅使用接口,并且将其传递给Odata模型的类不应继承其他类,而只能继承接口。