2010-01-06 80 views
0

我正在切换我的业务对象的代码生成器。我正在使用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的集合,如之前的状态。

回答

1

是否更改了FamilyConfiguration?由于亲子关系的改变,我看到序列化中断。具体来说,孩子不能与其父母有联系。那将是我第一次猜测,但没有能够看到这些类。

编辑:您可以编写一个小的控制台应用程序,使用DataContractSerializer显式序列化和反序列化您的对象,以确定序列化是否是问题。

+0

嗯,在这两种情况下,FmailyConfiguration都与Family有关联,并且它们非常相似。以下是SQL Metal FamilyConfiguration类:http://tinyurl.com/y8msxwv,以下是T4类:http://tinyurl.com/y8p5kzd。如果这会有所帮助,我也可以发布家庭。 – 2010-01-06 22:32:40

+0

以下是家族代码。 SQL Metal:http://tinyurl.com/y9kh4ta T4:http://tinyurl.com/yat2kyr – 2010-01-06 22:36:43

+1

Family上的其他属性是否正确序列化?并且是集合null还是N null FamilyConfigurations的集合? – 2010-01-06 23:04:24