Я переключаю генераторы кода для своих бизнес-объектов. Я использовал SQL Metal, но при переходе к генератору набора инструментов T4 сериализация, похоже, перестала работать, и похоже, что они делают одно и то же.
Это свойство, сгенерированное SQL Metal (работает):
[Association(Name="FK_FamilyConfiguration_Family", Storage="_FamilyConfigurations", ThisKey="FamilyID", OtherKey="FamilyID", DeleteRule="CASCADE")]
[DataMember(Order=4, EmitDefaultValue=false)]
public EntitySet<FamilyConfiguration> FamilyConfigurations
{
get
{
if ((this.serializing
&& (this._FamilyConfigurations.HasLoadedOrAssignedValues == false)))
{
return null;
}
return this._FamilyConfigurations;
}
set
{
this._FamilyConfigurations.Assign(value);
}
}
и это свойство, сгенерированное панелью инструментов T4 (которое не работает):
[DataMember(Order = 4, EmitDefaultValue = false)]
[Association(Name = "Family_FamilyConfiguration", Storage = "familyConfigurations", ThisKey = "FamilyID", OtherKey = "FamilyID")]
public EntitySet<FamilyConfiguration> FamilyConfigurations
{
get
{
if (this.serializing && !this.familyConfigurations.HasLoadedOrAssignedValues)
{
return null;
}
return this.familyConfigurations;
}
set
{
this.familyConfigurations.Assign(value);
}
}
Насколько я могу судить, похоже, что они генерируют почти одно и то же. Однако в последнем коде объект и все его ссылки правильно заполнены (FamilyConfigurations содержит ненулевую запись) на стороне сервера вызова WCF, но к тому времени, когда он достигает клиента, FamilyConfigurations имеет значение null. 1009 *
Я предполагаю, что у меня есть проблема с сериализацией, но я не вижу разницы между двумя сгенерированными свойствами. Возможно, есть что-то еще, что нужно сделать? Сгенерированный класс, членом которого является FamilyConfigurations, имеет тег DataContract под обоими генераторами.
Обновление: FamilyConfigurations имеет значение NULL, это не коллекция, содержащая NULL, как указано ранее.