1

如何从 silverlight 应用程序的域服务中的数据库中获取表的列名,然后在列表框中使用这些名称供客户端选择。我在这里查看了 LINQ Query 以获取 Silverlight 中的列标题,但有点令人困惑。

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

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

所有答案将不胜感激。

4

1 回答 1

1

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

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();
}
于 2012-07-26T16:03:44.100 回答