我用我需要的表创建了我的 dbml 文件。生成的方法之一就是这样,名称已更改并且在语法上不正确。但是我的代码使用创建的原始方法进行编译。
[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);
}
}
当我尝试使用
序列化我的结果集时 DataContractSerializer ser =
new DataContractSerializer(clientObj.GetType());
var memStream = new System.IO.MemoryStream();
ser.WriteObject(memStream ,clientObj);
memStream .Seek(0, System.IO.SeekOrigin.Begin);
var streamReader = new System.IO.StreamReader(memStream );
var xml = streamReader.ReadToEnd();
看起来像这段代码,见下文,它总是返回 null
if ((this.serializing && (this._ToEmployees.HasLoadedOrAssignedValues == false)))
如果我设置一个断点并单步执行代码,那么上面的语句
this._ToEmployees.HasLoadedOrAssignedValues
是真的,我得到了我的对象,而不是返回一个 null。
为什么当我单步执行代码时它的行为是正确的?我是否应该引入延迟以便填充 Entityset 对象?
最佳答案
我在我的 WCF 服务中遇到了同样的问题。在我的例子中,事实是在调试时,Linq 有足够的时间延迟加载子记录。当不处于 Debug模式时,它只是返回父记录。我的大多数方法都很好,但是有很多父记录和很多子记录,但没有一个子记录成功。所以我将此代码放入我的 WCF 方法中:
DataLoadOptions dlOptions = new DataLoadOptions();
dlOptions.LoadWith<ParentTable>(Parent => Parent.Child);
dc.LoadOptions = dlOptions;
关于c# - WCF/LINQ to SQL 中的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/940853/