我在使用Silverlight4,Ria Services和Entity Framework时遇到问题。

我从sl客户端尝试通过ria服务获取一些数据,在我的domainService类中,此方法称为:

public IQueryable<LastMinuteWachtLijstPromotie> GetLastMinuteWachtLijstPromoties(){
  IQueryable<LastMinuteWachtLijstPromotie> list = (IQueryable<LastMinuteWachtLijstPromotie>)this.ObjectContext.LastMinuteWachtLijstPromoties.Include("Promotie");

  return (from LastMinuteWachtLijstPromotie lwmp in list where lwmp.Actief select lwmp);
}


当我在调试模式下检查列表的内容时,其中填充了LastMinuteWachtLijstPromotie类型的对象。
这些对象具有名为Promotie的对象的导航属性。
而且我可以访问这些Promotie对象的属性。

但是,在Silveright客户端上,加载完成后会调用一个方法:

public void OnLoadEntitiesCompleted(ServiceLoadResult<T> result) {

}


在此方法中,按预期方式获取了所有请求的LastMinuteWachtLijstPromotie对象,该属性
但是,促销无效。

我已经在自动生成的元数据类的属性Promotie上设置了[Include]标签。
我使用.Include(“ Promotie”)

这些相同的方法用于域模型中的不同对象,效果很好。
另外,我似乎无法在.edmx文件中找到具有数据库映射和导航属性的差异。

有没有人遇到相同的问题或知道解决方案?

元数据类:

[MetadataTypeAttribute(typeof(LastMinuteWachtLijstPromotie.LastMinuteWachtLijstPromotieMetadata))]
        public partial class LastMinuteWachtLijstPromotie
        {

            // This class allows you to attach custom attributes to properties
            // of the LastMinuteWachtLijstPromotie class.
            //
            // For example, the following marks the Xyz property as a
            // required property and specifies the format for valid values:
            //    [Required]
            //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
            //    [StringLength(32)]
            //    public string Xyz { get; set; }
            internal sealed class LastMinuteWachtLijstPromotieMetadata
            {

                // Metadata classes are not meant to be instantiated.
                private LastMinuteWachtLijstPromotieMetadata()
                {
                }

                public int AlertId { get; set; }

                public string ArtikelNummer { get; set; }

                public Nullable<int> ArtikelVariant { get; set; }

                public int LastMinuteWachtLijstPromotieId { get; set; }

                [Include]
                public Promotie Promotie { get; set; }

                public int PromotieArtikelId { get; set; }

                public int PromotieId { get; set; }

                public bool Actief { get; set; }

                public DateTime Aanmaakdatum { get; set; }
            }
        }


        [MetadataTypeAttribute(typeof(Promotie.PromotieMetadata))]
    public partial class Promotie
    {

        // This class allows you to attach custom attributes to properties
        // of the Promotie class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class PromotieMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private PromotieMetadata()
            {
            }

            public string ActieType { get; set; }

            public string AssortimentsManagerNaam { get; set; }

            public string AssortimentsManagerTeamIds { get; set; }

            [Display(Name = "Commerciele tekst")]
            [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Nokavision.ReclameFolder.UI.Web.Resources.ValidationResources))]
            public string CommercieleTekst { get; set; }

            [Display(Name = " ")]
            public string CommercieleTekstDetails { get; set; }

            [Include]
            public Frame Frame { get; set; }

            public Nullable<int> FrameId { get; set; }

            public Nullable<DateTime> LastMinuteWijzigingsDatum { get; set; }

            public string Opmerkingen { get; set; }

            [Display(Name = "Op wachtlijst")]
            public Nullable<bool> OpWachtLijst { get; set; }

            //public Nullable<int> PromotieCopyId { get; set; }

            public int PromotieId { get; set; }

            [Include]
            public EntityCollection<PromotieLeverancier> PromotieLeveranciers { get; set; }

            [Include]
            public EntityCollection<PromotieMutatie> PromotieMutaties{ get; set; }

            //public Nullable<int> PromotieOrigineleId { get; set; }

            [Include]
            public EntityCollection<PromotieSymbool> PromotieSymbolen { get; set; }

            public string Status { get; set; }

            [Display(Name = "Promotie inhoud")]
            public string PromotieInhoud { get; set; }

            [Display(Name = "Promotie eenheid")]
            public string PromotieEenheid { get; set; }

            [Display(Name = "Promotie prijs")]
            public decimal PromotiePrijs { get; set; }
        }
    }

最佳答案

Composition属性添加到LastMinuteWachtLijstPromotieMetadata类的Promotie属性中。然后它应该工作。

public partial class LastMinuteWachtLijstPromotie {
  internal sealed class LastMinuteWachtLijstPromotieMetadata{
    [Include]
    [Composition]
    public Promotie Promotie { get; set; }
  }
}

10-07 14:39