C# WCF/LINQ到SQL中的序列化
我用我需要的表创建了我的dbml文件。生成的方法之一就是这样,名称已更改,语法不正确。但是我的代码是用创建的原始方法编译的C# WCF/LINQ到SQL中的序列化,c#,linq,wcf,serialization,C#,Linq,Wcf,Serialization,我用我需要的表创建了我的dbml文件。生成的方法之一就是这样,名称已更改,语法不正确。但是我的代码是用创建的原始方法编译的 [Association(Name="Clients_ToEmployee", Storage="_ToEmployees", ThisKey="ClientID", OtherKey="ClientID")] [DataMember(Order=70, EmitDefaultValue=false)] public EntitySet<ClientToEmploye
[Association(Name="Clients_ToEmployee", Storage="_ToEmployees", ThisKey="ClientID", OtherKey="ClientID")]
[DataMember(Order=70, EmitDefaultValue=false)]
public EntitySet<ClientToEmployee> ClientToEmployees
{
get
{
if ((this.serializing &&(this._ToEmployees.HasLoadedOrAssignedValues == false)))
{
return null;
}
return this._ToEmployees;
}
set
{
this._ToEmployees.Assign(value);
}
}
这段代码看起来很像,如下所示,它总是返回null
if ((this.serializing && (this._ToEmployees.HasLoadedOrAssignedValues == false)))
如果我设置了一个断点并单步执行代码,那么上面的语句
this._ToEmployees.HasLoadedOrAssignedValues
是true,我得到的是我的对象,而不是返回null
为什么在我单步执行代码时它的行为正确?我是否应该引入一个延迟,以便填充EntyTeSET对象?,您必须包含更多的代码来确定我们,但是考虑一下它可能告诉您实情。也许没有。可能由于某种原因,您正在通过与在调试器外部执行不同的代码路径。我们说不出来,因为你没有发布代码 我建议您简化场景并重试
我还建议不要从web服务返回LINQ to SQL或LINQ to Entities对象。不幸的是,Microsoft选择在基类中包含依赖于实现的数据,因此它们不能干净地序列化。我的WCF服务也遇到了同样的问题。在我的例子中,事实是在调试时,Linq有足够的时间延迟加载子记录。当不处于调试模式时,它只是返回父记录。我的大多数方法都很好,但其中一个方法有很多父记录和很多子记录,但没有一个子记录成功。所以我把这段代码放在我的WCF方法中:
DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<ParentTable>(Parent => Parent.Child);
dc.LoadOptions = dlOptions;
DataLoadOptions dlOptions=newdataloadoptions();
dlOptions.LoadWith(Parent=>Parent.Child);
dc.LoadOptions=dlOptions;
DataLoadOptions dlOptions=newdataloadoptions();
dlOptions.LoadWith(Parent=>Parent.Child);
dc.LoadOptions=dlOptions;
它起作用了
我真的花了很多时间来寻找解决方案
DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<ParentTable>(Parent => Parent.Child);
dc.LoadOptions = dlOptions;
DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<ParentTable>(Parent => Parent.Child);
dc.LoadOptions = dlOptions;