【问题标题】:Silverlight WCF RIA Service select from SQL View vs SQL TableSilverlight WCF RIA 服务从 SQL 视图与 SQL 表中选择
【发布时间】:2012-11-20 14:14:04
【问题描述】:

我是通过一条曲折而令人沮丧的路线到达这个困境的,但我将从我现在所处的位置开始。有关信息,我正在使用 VS2010、Silverlight 5 以及最新版本的 Silverlight 和 RIA 工具包、SDK 等。

我的数据库中有一个视图(它现在实际上是一个索引视图,但这对行为没有影响)。出于测试目的(包括测试我的理智),我将视图复制为表(即相同的列名和定义),并将所有视图行插入表中。因此,如果我从查询分析器中的视图或表中选择 *,我会得到 相同 的结果。到目前为止一切顺利。

我在我的 Silverlight 业务应用程序 Web 项目中创建了一个 EDF 模型,包括所有对象。

我基于模型创建一个域服务,它为视图和表以及关联的查询对象创建 ContextTypes 和元数据。

如果我通过表查询在我的 Silverlight 项目中填充 Silverlight 列表框,它会返回表中的所有数据。

如果我通过 View Query 填充同一个 ListBox,它只返回一行,始终是集合中的第一行,但是它是有序的。事实上,如果我通过调试器深入研究内部工作原理,当它在服务中执行 ObjectContext Query 时,它会返回正确行数的结果集,但所有行都是相同的!如果我按升序排序,我得到第一行的 n 个副本,降序我得到最后一行的 n 个副本。

谁能把我从这里的痛苦中解救出来,并告诉我为什么视图不起作用?

阿德

【问题讨论】:

    标签: wcf-ria-services silverlight-5.0


    【解决方案1】:

    好吧,那是可以预见的 - 几乎每次我在论坛上提出问题时,我都会在等待响应涌入时偶然发现答案!

    尽管已通过元数据和 model.designer 文件并确保所有“视图”和“表”类/方法定义等都是相同的,但它仍然显示视图和表查询之间的行为差​​异令人恼火。所以问题应该是数据库引起的吧?

    果然,当我创建视图的“相同”表版本时,我没有注意到自己创建了 NOT NULL 列!尽管我使用 SELECT NEWID() 在视图上创建唯一键列,但数据库坚持认为视图中的 ID 列是 NULLABLE,显然这是导致问题的原因。

    为了节省一些存储空间,我从使用 NEWID() 切换到使用 ROW_NUMBER() 来创建我的键列,但仍然存在“NULLABLE”属性问题。所以我然后将其更改为

    SELECT ISNULL(ROW_NUMBER() (OVER...) , -1)

    对于 ID 列,最后创建视图中的列 NOT NULL!尽管 NEWID() 和 ROW_NUMBER() 都不能生成 NULL 输出,但似乎您必须握住 SQL Server 的手并使用 ISNULL 运算符对其进行确认,然后它才会相信自己。

    完成此操作,删除/重新创建我的模型和服务文件后,无需手动添加任何 [Key()] 属性或其他任何内容,一切都迸发出了光彩夺目的彩色生活。问题一直出在数据库上,而不是模型/服务/元数据定义。

    希望这可以节省一些时间。现在我需要做的就是弄清楚为什么我两天前开始使用的原始存储过程方法不起作用 - 但至少我现在有了一个提示!

    阿德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多