wcf 将 linq 发送到 sql DataContext
Posted
技术标签:
【中文标题】wcf 将 linq 发送到 sql DataContext【英文标题】:wcf sending linq to sql DataContext 【发布时间】:2011-11-12 13:33:39 【问题描述】:假设我有一个 linq to sql 类。我想通过 wcf 返回对象数据上下文。我已经使数据库成为单向的。我将 WCF 工作 getString() 只是为了证明如果我注释掉关于 ToolboxDataContext 的所有内容,wcf 服务可以工作。
公共接口数据库() [运营合同] ToolboxDataContext getCtx(); [运营合同] 字符串 getString(); 公共类测试:数据库 公共工具箱数据上下文 getCtx() ToolboxDataContext ctx = new ToolboxDataContext (); 返回ctx; 公共字符串 getString() 返回“WCF WORKS”; [数据合约] 公共类测试//我的svc文件 [数据成员] 公共工具箱数据上下文 ctx; [数据成员] 公共字符串 ID;【问题讨论】:
您在问题中说 LINQ-to-SQL,所以我标记了这个问题。但是在下面的其中一个 cmets 中,您说的是实体框架。不是一回事。 【参考方案1】:您的ToolboxDataContext
是实体框架数据上下文吗?假设它是......
我不确定通过网络发送整个数据上下文对象是否真的是您想要做的。它可能不会从接收它的客户那里“工作”。就像,您将无法针对它运行 Linq 语句并击中数据库 pr 任何东西......您可能只想返回数据实体(而不是整个上下文),如 here (MSDN) 所示,或者可能考虑使用 @改为 987654322@?
我想一个很好的问题是;客户端将如何处理 DataContext?
【讨论】:
客户端应该能够在不知道数据库凭据的情况下进行 CRUD。是的实体框架。 感谢您提供数据服务链接。我不太了解这项技术。 @jvelez - 如果您有兴趣在 WCF 数据服务 (OData) 上执行 CRUD 操作,您可能还想阅读这个问题以及其中的链接:***.com/questions/5228945/… 是的,它不会工作!大数据就是答案。我只需要根据向 Odata 和 walla 发出请求的计算机基于 Active Directory 身份验证来保护访问。【参考方案2】:这似乎不是一个真正的问题(你的问题是什么,你在问什么?)
但假设这只是您想要反馈的想法 - 这是没有意义的。它相当于向您的客户端发送数据库连接。您不能序列化和反序列化连接然后重用它。
datacontext 是一个对象,所以一旦你确保它被正确的属性修饰,你应该能够序列化它,但它封装了一个数据库连接。无法序列化数据库连接。从概念上讲,所有描述该连接的信息都可以通过 WCF 进行序列化和传递,但这可能会暴露系统中的安全漏洞。
使用 LINQ-to-SQL DataContext 的正确模式是实例化它,执行您需要的任何数据库操作,然后处理它。最好不要长时间持有它,绝对不要在你的服务之外发布它。
【讨论】:
感谢您的回复。基本上,我问的是如何与数百个应用程序共享数据上下文。这样您就不必为每个应用程序创建一个数据上下文。如果数据库结构发生变化,我将不得不更新 10000 个数据上下文而不是提供上下文的服务。 您的服务应该通过应用程序检索数据来提供操作。应用程序本身不应访问数据库。以上是关于wcf 将 linq 发送到 sql DataContext的主要内容,如果未能解决你的问题,请参考以下文章
使用 linq to sql 后端通过 WCF 查询 DTO 对象
将 JSON 数组发布到 WCF Rest 服务会导致空参数。数据合同?
在数据访问应用程序块之上使用“LINQ to SQL”和“WCF 数据服务”
关于将 Flex 与 WCF 和 Linq to Entities 一起使用的建议
为啥,当我在 WCF 服务中模拟时,当我尝试运行 LINQ to SQL 查询时,我的服务不能加载 System.Transactions?