使用 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 数据服务的主要内容,如果未能解决你的问题,请参考以下文章