使用 Linq-to-SQL 的 ADO.NET 数据服务

Posted

技术标签:

【中文标题】使用 Linq-to-SQL 的 ADO.NET 数据服务【英文标题】:ADO.NET Data Services with Linq-to-SQL 【发布时间】:2010-10-11 16:59:06 【问题描述】:

在将 linq-to-sql 与 ado.net 数据服务一起使用时,我遇到了一个奇怪的错误。我有一个连接到远程数据库的简单 silverlight 应用程序。我首先添加了 linq-to-sql 类并将一个表拖到设计器上。然后我添加了一个 ADO.NET 数据服务,更新了 DataService 引用以指向 L2S 数据上下文。

编译没有问题。

当我在 IE 中打开服务时,我立即收到错误,因此我将以下属性添加到数据服务:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]

这会显示详细的错误消息:

异常消息是“在数据上下文类型“DataClasses1DataContext”上,有一个*** IQueryable 属性“table1”,其元素类型不是实体类型。确保 IQueryable 属性是实体类型或在数据上下文类型上指定 IgnoreProperties 属性以忽略此属性

我在 L2S 设计器中使用的任何数据库表都会发生这种情况!

这是什么错误,为什么会出现?

【问题讨论】:

每个端点都可以被localhostServiceName/EndPointName访问 【参考方案1】:

您需要使用 DataServiceKey 属性来装饰您的类。

更多详情请参见 Marc 的博客 here 和 MSDN 博客 here(后者讨论多对多关系,但涵盖了 DatServiceKey 属性)。

【讨论】:

这确实解释了很多,但为什么它不向我显示 XML 格式的实体?它只是说 DEFAULT table1。我什至用过 config.SetEntitySetAccessRule("table1", EntitySetRights.All); 另外,如果表上没有设置主键,我怎么知道要设置哪个属性作为 DataServiceKey?

以上是关于使用 Linq-to-SQL 的 ADO.NET 数据服务的主要内容,如果未能解决你的问题,请参考以下文章

Ado.net

ADO.NET 执行部分更新/插入

如何使用 MS Access 作为 ADO.NET 实体框架的提供者?

ado.net 和 dapper 之间的交集/联合是啥?

使用 ADO.NET 的 PostgreSQL 参数化插入

使用 ADO.NET 流畅的 NHibernate 地图