我正在开发一个Web服务,我们使用LINQ-to-SQL进行数据库抽象。当客户端使用我们的web服务时,对象被序列化为XML,并且所有对象都是花花公子。
现在我们希望开发使用本机数据类型的自己的客户端,因为没有理由做对象 - > xml->对象。但是,根据我的理解,你无法传输LINQ对象,因为它们直接映射到数据库,因此数据是“实时”的。
我的问题是,是否有办法对您提取的数据进行“快照”,将LINQ对象设置为“离线”,然后进行传输。在将数据传输到我们的客户端后,数据不会发生变化,我们也不需要数据库访问。
答案 0 :(得分:2)
LINQ-to-SQL类可以与DataContractSerializer
(对于WCF)一起使用(您需要在设计器中启用序列化属性)。有了这个,您应该能够与客户端共享数据程序集。只要你不使用数据上下文,对象本身应该表现良好(只是断开连接 - 所以没有延迟加载)。
诀窍是您需要在序列化代码中重用这些类型(来自现有程序集)。如果您使用的是WCF,则可以使用svcutil /r
或通过IDE执行此操作。
尽管如此;为这些场景维护单独的DTO类通常更简洁。但我有时会以上述方式做到这一点。
答案 1 :(得分:1)
如果您愿意使用WCF(对于Web服务和客户端),您可以使用[DataContract]和[DataMember]属性修饰Linq2SQL生成的类。
请查看以下链接以获取一些指导: