2012-07-26 3 views
1

Silverlight 응용 프로그램의 도메인 서비스에서 데이터베이스의 테이블 열 이름을 얻은 다음이를 선택하여 클라이언트가 선택할 수 있도록 목록 상자에서 사용하는 방법은 무엇입니까? 나는 여기서 LINQ Query to get Column Headers in Silverlight을 보았지만 조금 혼란 스러웠다.Silverlight 데이터베이스에서 테이블의 열 이름을 얻으십시오.

내가 아는 한 Silverlight에서는 서버 측의 데이터에 도달하는 도메인 서비스를 작성하고 Silverlight는 클라이언트 측에서 컨텍스트를 만들고 거기에서 컨텍스트를 사용합니다. 그래서 나는 datacontext가 필요하다고 가정하고 동일한 데이터베이스에 도달하는 서버 측과 위의 링크와 같은 방식으로 해당 컨텍스트를 사용했지만 이번에는 "System.ArgumentException이 사용자 코드로 처리되지 않음"및 "Message = Keyword not supported : 'metadata'와 같은 예외가있었습니다. " 클라이언트 측에서 System.Data.Linq inn을 사용할 수 없으므로 클라이언트 쪽에서 해당 메서드를 사용할 수 없습니다.

LinqToEntitiesDomainService 클래스에서 상속 된 도메인 서비스에이 메서드를 쓰고 있습니다.이 시점에서 정말 고생했습니다.

모든 대답을 환영합니다.

+0

나는 . 내가 여기서 뭔가에 발견 대답을 검색하고 데이터 컨텍스트 클래스에서 나는를 연결을 시도하는 동안 데이터베이스를 직접 그래서 나는 실버 라이트에서하지 말아야 할 일을하고있는 것 같아요. 그래서 지상 제로 어떻게 실버 라이트에서 wcf 리아 서비스를 사용하여 데이터베이스에서 테이블의 열 이름을 얻을 수 있습니까? – f4d3

답변

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' 

결과를 얻으려면 Entity Framework 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(); 
} 
+0

나는 그것을 시도했다 .bu 나는 예외를 얻는다 ** "EntitiyCommandExecutionException"** "데이터 리더는 하나 이상의 필드를 가지고있다. 여러 필드가 EDM 원시 타입에 유효하지 않다." – f4d3

+0

괜찮 았어 내 고마워. 고마워. – f4d3

관련 문제