我正在切换我的业务对象的代码生成器。我正在使用SQL Metal,但在转移到T4工具箱的生成器时,序列化似乎停止了工作,而且看起来两者的作用几乎相同。WCF序列化问题
这是SQL金属(工作)所产生的属性:
[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);
}
}
据我可以说,他们似乎产生了几乎相同的事情。但是,对于后者的代码,在WCF调用的服务器端正确填充对象及其所有引用(FamilyConfigurations包含非空条目),但在到达客户端时,FamilyConfigurations为null。
我假设我有某种序列化问题,但我没有看到两个生成的属性之间有什么区别。也许还有其他事情需要完成? FamilyConfigurations所属的生成类在两个生成器下都有一个DataContract标记。
更新:FamilyConfigurations为null,它不是包含null的集合,如之前的状态。
嗯,在这两种情况下,FmailyConfiguration都与Family有关联,并且它们非常相似。以下是SQL Metal FamilyConfiguration类:http://tinyurl.com/y8msxwv,以下是T4类:http://tinyurl.com/y8p5kzd。如果这会有所帮助,我也可以发布家庭。 – 2010-01-06 22:32:40
以下是家族代码。 SQL Metal:http://tinyurl.com/y9kh4ta T4:http://tinyurl.com/yat2kyr – 2010-01-06 22:36:43
Family上的其他属性是否正确序列化?并且是集合null还是N null FamilyConfigurations的集合? – 2010-01-06 23:04:24