如何从silverlight应用程序的域服务中的数据库中获取表的列名,然后在列表框中使用这些列进行客户端选择。 我在这里看了LINQ Query to get Column Headers in Silverlight但是有点混乱。
据我所知,在Silverlight中你写域服务来访问服务器端的数据,silverlight在客户端创建上下文,你在那里使用上下文。所以我假设我需要一个datacontext,我在服务器端到达同一个数据库,我在我的方法中使用该上下文作为上面的链接,但这次有一个例外,如“System.ArgumentException未被用户代码处理”和“Message = Keyword不支持:'元数据'。”我不能在客户端使用System.Data.Linq,所以我可以在客户端使用该方法
我在从LinqToEntitiesDomainService类继承的域服务中编写此方法。我真的陷入了这一点。
所有答案将不胜感激。
答案 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();
}