Visual Studio Express 2013 및 SQL Server Express 2014를 사용하여 LINQ to SQL을 사용하여 WPF 응용 프로그램에 데이터를 액세스합니다. 내 의도는 observableCollections에 매핑 된 다양한 UI 요소를 사용하여 완전한 CRUD 기능입니다. 지금까지 모든 것이 잘 작동하지만 나는 단지 DataGrid에 매핑 된 개별 테이블을 사용하고 있습니다. 두 테이블의 왼쪽 조인 결과를 하나의 DataGrid로 표시하려면 dbml 레이아웃에서 새 테이블을 만들고 데이터 소스로 저장 프로 시저를 사용하십시오. IDE 생성 코드는 다음과 같습니다.WPF LINQ to SQL 클래스 사용자 지정
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ListAllDocuments")]
public partial class TrackDocument : INotifyPropertyChanging, INotifyPropertyChanged
{ // innards removed for readability }
실행하면 처리되지 않은 예외 "잘못된 개체 이름 'dbo.ListAllDocuments'가 발생합니다. . . 이것은 Left Join 문과 함께 저장 프로 시저입니다. 이 데이터를 나타 내기 위해 작성한 클래스에 쿼리 언어를 추가하려면 어떻게해야합니까? 여기에 내가 UI에 최종 바인딩에 대한 단일 테이블 케이스 모델링 생성자를 관찰 할 수있는 클래스입니다 :
class ObservableTrackDocument : ObservableCollection<TrackDocument>
{
public ObservableTrackDocument(DocControlClassesDataContext dataDc)
{
foreach (TrackDocument tDoc in dataDc.TrackDocuments)
{
this.Add(tDoc);
}
}
}
는 그러나 저장 프로 시저를 소스로 사용 할 수 없기 때문에 데이터 컨텍스트는 테이블 작성되지 않았습니다. 중 (필자는 "소스를 remvove
class ObservableTrackDocument : ObservableCollection<TrackDocument>
{
public ObservableTrackDocument(DocControlClassesDataContext dataDc)
{
var query = from f in dataDc.FilesTransmitteds
from r in dataDc.FilesReturneds
.Where(x => f.DocumentNumber == x.DocumentNumber && f.REV == x.REV)
.DefaultIfEmpty()
select new { (list of fields) };
foreach (TrackDocument tDoc in query)
{
this.Add(tDoc);
}
}
}
그러나이 작동하지 않습니다 같은 것을 : 내가 ObservableCollection에를 채우기 위해 여기에 생성자에서 LINQ 쿼리를 추가 한 다음 foreach 루프를 할 필요 나에게 발생 "원래 예외의 원인 인 dbml 레이아웃의 TrackDocument 클래스 속성 목록에 대한 저장 프로 시저에 대한 참조). . . 컴파일러는 어떤 이유로 쿼리 항목을 TrackDocument 클래스로 캐스팅을 조정할 수 없습니다.
일반 단일 테이블의 경우 TrackDocuemnts 컬렉션을 생성하는 쿼리를 실행하려면 TrackDocument 클래스에서 IDE 생성 메서드 중 하나를 재정의해야합니까? 그렇다면 무시 방법에 대한 예를 들어 주시겠습니까? 클래스 코드는 자동 생성 파일에 있으므로 수동으로 거기에 물건을 추가 할 수 없다는 것을 알고 있습니다. . .
분명히하는 것이 좋겠습니다. . . 나는 이런 것들을 설명하는 언어에 대해 혼란스러워합니다.
감사합니다, 폴
System.Data.Linq.Mapping.FunctionAttribute를 사용하여 저장 프로 시저를 함수에 연결하려고한다고 생각합니다. – juharr
@juharr DataContext에 저장 프로 시저를 디자이너 레이아웃으로 드래그하여 추가하는 것으로 해석합니다. . . 내가 한 일이다. 메서드로 나타나며 클래스의 비헤이비어와 연결할 수 있지만 삽입, 삭제 또는 업데이트로만 연결할 수 있습니다. designer.cs 파일을 수동으로 변경하면 IDE에서 자동으로 생성되므로 덮어 씁니다. 그래서 정확히 무슨 뜻인지 모르겠습니다. . . 죄송합니다 obtuse :) –
@juharr 나는 줄을'[global :: System.Data.Linq.Mapping.FunctionAttribute (Name = "dbo.ListAllDocuments")]'로 변경하려고 시도했지만 컴파일러는 이것이 단지 방법에 적합합니다. . . –