Ham*_*mid 7 c# serialization linq-to-sql
我需要使用linq克隆行.我找到了这个方法:
public static T Clone<T>(this T source)
{
var dcs = new System.Runtime.Serialization
.DataContractSerializer(typeof(T));
using (var ms = new System.IO.MemoryStream())
{
dcs.WriteObject(ms, source);
ms.Seek(0, System.IO.SeekOrigin.Begin);
return (T)dcs.ReadObject(ms);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当尝试克隆行时,比如db1.Persons.First().Clone();
我得到这个例外:"类型'TestLinq.PersonAddress'的对象图包含周期,如果禁用参考跟踪,则无法序列化."
注意:我的表包含1个主键,1个唯一索引包含3个字段
能帮帮我吧
谢谢
哈米德
Lee*_*Lee 17
出现此问题的原因是linq实体往往在两个方向上的父项和子项之间有链接.例如,如果您将Order类映射到表,并将OrderItem类映射到另一个表,那么OrderItem表看起来如下所示:
CREATE TABLE OrderItem(... OrderId int引用Order(Id))
生成的linq实体将如下所示:
public class Order
{
//other members
public EntitySet<OrderItem> OrderItems { get; }
}
public class OrderItem
{
//other members
public Order Order { get; }
}
Run Code Online (Sandbox Code Playgroud)
这不能序列化,因为订单与每个OrderItem子项之间存在循环引用.如果您正在使用linq2sql设计器创建这些类,您可以通过单击设计器表面并将"序列化模式"更改为"单向"来告诉它仅在一个方向(从父级到子级)创建引用
归档时间: |
|
查看次数: |
3420 次 |
最近记录: |