从silverlight中的数据库中获取表的列名

时间:2012-07-26 05:59:09

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

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

据我所知,在Silverlight中你写域服务来访问服务器端的数据,silverlight在客户端创建上下文,你在那里使用上下文。所以我假设我需要一个datacontext,我在服务器端到达同一个数据库,我在我的方法中使用该上下文作为上面的链接,但这次有一个例外,如“System.ArgumentException未被用户代码处理”和“Message = Keyword不支持:'元数据'。”我不能在客户端使用System.Data.Linq,所以我可以在客户端使用该方法

我在从LinqToEntitiesDomainService类继承的域服务中编写此方法。我真的陷入了这一点。

所有答案将不胜感激。

1 个答案:

答案 0 :(得分: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方法。

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