RIA Domainservice لا يولد رمز العميل باستخدام DataContracts
-
04-10-2019 - |
سؤال
أنا أعمل على تطبيق Silverlight 4.0 وأستخدم خدمات RIA. لقد قمت بإنشاء فئة على جانب الخادم الذي يحتوي على سمات DataContract و Datamember المطبق عليها.
يعرض خدمة Domainser هذه الفئة نتيجة استعلام ، وعلى هذا النحو ، تقوم بإنشاء رمز لها على العميل. لكن بطريقة ما لا يولد رمزًا لجميع خصائص الفصل. يتم إنشاء الخصائص البدائية من Type Guid و String و Int و Bool وما إلى ذلك على ما يرام ، ولكن إذا كان لدي خاصية من النوع المعقد الخاص بي ، فإن هذه الخاصية لا يتم إنشاؤها على العميل.
هذا هو الفصل المعني:
[DataContract]
[KnownType(typeof(SummaryGroup))]
public class SummaryDataSet
{
public SummaryDataSet()
{
}
[KeyAttribute]
[DataMember]
public Guid Guid { get; set; }
[DataMember]
public SummaryGroup SummaryGroup { get; set; }
}
يتم إنشاء خاصية GUID على العميل على ما يرام. لم يتم إنشاء خاصية SummaryGroup على العميل. إليك الرمز الخاص بـ CummaryGroup:
[DataContract]
public class SummaryGroup
{
public SummaryGroup()
{
}
[KeyAttribute]
[DataMember]
public Guid Guid { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public int Sequence { get; set; }
}
كلا الفئتين في نفس مساحة الاسم.
سؤال: لماذا لا يتم إنشاء خاصية SummaryGroup الخاصة بـ SummaryDataset على العميل وما الذي يجب علي فعله لإصلاح هذا؟
المحلول
لا يمكن لـ WCF RIA التعامل مع الأنواع المعقدة ، ولكن يمكنك تجربة هذا:
[DataContract]
[KnownType(typeof(SummaryDataSet))]
public class SummaryDataSet
{
public SummaryDataSet()
{ }
[KeyAttribute]
[DataMember]
public Guid Guid { get; set; }
[DataMember]
[Association("SummarySet_SummaryGrp_FK", "Guid", "Guid")]
public SummaryGroup SummaryGroup { get; set; }
}
هذا يمنح RIA المعلومات للاتصال من SummaryDatAset إلى SummaryGroup.
هذا يفترض أنه يمكنك طلب كل من SummaryDataset و SummaryGroup من خدمة Serverside.