【问题标题】:get column names of a table from database in silverlight从 Silverlight 中的数据库中获取表的列名
【发布时间】:2012-07-27 00:03:44
【问题描述】:

如何从 silverlight 应用程序的域服务中的数据库中获取表的列名,然后在列表框中使用这些名称供客户端选择。 我浏览过这里LINQ Query to get Column Headers in Silverlight,但有点混乱。

据我所知,在 Silverlight 中,你编写域服务以访问服务器端的数据,silverlight 在客户端创建上下文,你在那里使用上下文。所以我假设我需要一个数据上下文,我在服务器端到达同一个数据库,我在我的方法中使用了该上下文作为上面的链接,但这次出现了一个异常,如“System.ArgumentException 未被用户代码处理”和“不支持消息 = 关键字:'元数据'。”我不能在客户端使用 System.Data.Linq inn,所以我也不能在客户端使用该方法

我正在从 LinqToEntitiesDomainService 类继承的域服务中编写此方法。我真的卡在这一点上。

所有答案将不胜感激。

【问题讨论】:

  • 当我在寻找答案时,我在这里偶然发现了一些东西。stackoverflow.com/questions/5155230/…> 在 datacontext 类中我试图直接连接数据库,所以我想我正在做一些我不应该做的事情银光。所以归零我如何在silverlight中使用wcf ria服务从数据库中获取表的列名?

标签: c# silverlight linq-to-entities wcf-ria-services


【解决方案1】:

没有对此的内置支持。但是,您可以使用以下 SQL 从表中获取列。在此示例中,有一个名为 Foo.Bar 的表,其中 Foo 是架构。

SELECT c.name
FROM sys.objects o
JOIN sys.columns c
    ON o.object_id = c.object_id
JOIN sys.schemas s
    ON o.schema_id = s.schema_id
WHERE
    s.name = 'Foo'
    AND o.name = 'Bar'

我正在使用实体框架DbContext 来获取结果。

var commandText = "<SQL from above>";
var contextAdapter = (IObjectContextAdapter) this;
IEnumerable<string> columnNames = contextAdapter.ObjectContext.ExecuteStoreQuery<string>(commandText);

然后您可以将调用方法添加到您的 DomainService。

[Invoke] // Use invoke for non-entities
public string[] GetColumnNames(string table)
{
    // Format the SQL and get the results;
    return columnNames.ToArray();
}

【讨论】:

  • 我试过了,但我得到了异常“EntitiyCommandExecutionException”“数据读取器有多个字段。多个字段对EDM原始类型无效。”跨度>
猜你喜欢
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 2014-05-27
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多