코드를 사용하여 데이터 관련 작업 수행
Visual Studio LightSwitch에서 디자이너 및 도구 창을 사용하여 데이터와 관련된 다양한 디자인 작업을 수행할 수 있습니다.그러나 특정 작업은 응용 프로그램에 코드를 추가해야만 수행할 수 있습니다.예를 들어, 사용자 지정 조건을 적용하여 필드 유효성을 검사하려면 코드를 작성해야 합니다.이 문서에서는 데이터 런타임 개체 모델을 사용하여 데이터 관련 작업을 수행하는 방법을 보여 줍니다.응용 프로그램에서 코드를 작성할 수 있는 위치에 대한 자세한 내용은 다음 항목을 참조하십시오.
Visual Studio LightSwitch에서 코드를 작성하는 방법에 대한 일반적인 지침은 LightSwitch에서 코드 작성를 참조하십시오.
일반 작업
다음 목록에서는 데이터 런타임 개체 모델을 사용하여 수행할 수 있는 일반적인 데이터 관련 작업을 보여줍니다.작업은 이 문서의 뒷부분에 설명되어 있습니다.
데이터 읽기
데이터 업데이트
데이터 삭제
데이터 추가
데이터 저장
데이터 유효성 검사
데이터에 대한 권한 설정
변경 집합 사용
쿼리 확장
데이터 읽기
응용 프로그램에서 모든 데이터 원본에서 개별 데이터 항목 또는 데이터 항목의 컬렉션을 읽을 수 있습니다.
다음 예제에서는 화면에 현재 선택되어 있는 고객을 검색합니다.
Private Sub RetrieveCustomer_Execute()
Dim cust As Customer = Me.Customers.SelectedItem
If cust.ContactName = "Bob" Then
'Perform some task on the customer entity.
End If
End Sub
partial void RetrieveCustomer_Execute()
{
Customer cust = this.Customers.SelectedItem;
if (cust.ContactName == "Bob")
{
//Perform some task on the customer entity.
}
}
다음 예제에서는 고객의 컬렉션을 반복합니다.
Private Sub RetrieveCustomers_Execute()
For Each cust As Customer In Me.DataWorkspace.NorthwindData.Customers
If cust.ContactName = "Bob" Then
'Perform some task on the customer entity.
End If
Next
End Sub
partial void RetrieveCustomers_Execute()
{
foreach (Customer cust in this.DataWorkspace.NorthwindData.Customers)
{
if (cust.ContactName == "Bob")
{
//Perform some task on the customer entity.
}
}
}
데이터 관계 탐색
관련 엔터티에서 데이터를 읽을 수 있습니다.예를 들어, 고객 엔터티가 주문 엔터티와 일대다 관계를 가질 수 있습니다.고객 엔터티의 주문 속성을 사용하여 고객에 의해 배치된 모든 주문을 반복할 수 있습니다.
다음 예제에서는 한 고객과 관련된 주문 컬렉션을 반복합니다.
Private Sub RetrieveSalesOrders_Execute()
Dim cust As Customer = Me.Customers.SelectedItem
For Each myOrder As Order In cust.Orders
If myOrder.OrderDate = Today Then
'Perform some task on the order entity.
End If
Next
End Sub
partial void RetrieveSalesOrders_Execute()
{
Customer cust = this.Customers.SelectedItem;
foreach (Order order in cust.Orders)
{
if (order.OrderDate == DateTime.Today)
{
//perform some task on the order entity.
}
}
}
다음 예제에서는 특정 주문을 한 고객을 가져옵니다.
Private Sub RetrieveCustomer_Execute()
Dim order As Order
order = Me.DataWorkspace.NorthwindData.Orders_Single _
(Orders.SelectedItem.OrderID)
Dim cust As Customer
cust = order.Customer
'Perform some task on the order entity.
End Sub
partial void RetrieveCustomer_Execute()
{
Order order = this.DataWorkspace.NorthwindData.Orders_Single
(Orders.SelectedItem.OrderID);
Customer cust = order.Customer;
//Perform some task on the customer entity.
}
쿼리를 실행하여 데이터 읽기
모델에서 쿼리를 검색한 다음, 해당 쿼리를 사용자 코드에서 실행할 수 있습니다.예제를 보려면 방법: 코드를 사용하여 쿼리에서 데이터 검색를 참조하십시오.
데이터 업데이트
코드를 사용하여 모든 엔터티에 대한 데이터를 업데이트할 수 있습니다.다음 예제는 사용자가 Order 엔터티를 화면에서 만들고 저장 단추를 클릭할 때 실행하는 코드를 보여줍니다.Order Details 엔터티의 필드를 사용하여 Products 엔터티에서 필드를 업데이트 하는 코드입니다.
Private Sub Orders_Inserting(entity As Order)
For Each detail In entity.Order_Details
detail.Product.UnitsInStock =
detail.Product.UnitsInStock - detail.Quantity
Next
End Sub
partial void Orders_Inserting(Order entity)
{
foreach (Order_Detail detail in entity.Order_Details)
{
detail.Product.UnitsInStock =
(short?)(detail.Product.UnitsInStock - detail.Quantity);
}
}
[!참고]
코드가 다른 데이터 원본에서 데이터를 수정한다면 해당 데이터 원본의 SaveChanges 메서드를 호출하여 이러한 변경 내용을 커밋해야 합니다.자세한 내용은 How to: Save Data를 참조하십시오.
데이터 삭제
엔터티의 Delete 메서드를 호출하여 데이터를 삭제할 수 있습니다.다음 예제에서는 NorthwindData 데이터 원본에서 고객을 삭제합니다.
Private Sub DeleteCustomer_Execute()
Dim cust As Customer
cust = Me.Customers.SelectedItem
If Customers.CanDelete Then
cust.Delete()
End If
End Sub
partial void DeleteCustomer_Execute()
{
Customer cust =
this.Customers.SelectedItem;
if (Customers.CanDelete)
{
cust.Delete();
}
}
데이터 추가
다음 예제에서는 NorthwindData 데이터 원본에 새 고객을 추가합니다.이 예제에서는 SharePoint 목록에 최근에 추가된 연락처 정보를 사용하여 새 고객을 설명하는 필드를 채웁니다.예제는 NewCustomersInSharePoint라는 쿼리를 호출하여 SharePoint 목록의 어떤 연락처를 NorthwindData 데이터 원본으로 가져오지 않을 것인지 결정합니다.
Private Sub ImportCustomers_Execute()
For Each spCust As SharePointCustomer In _
Me.DataWorkspace.SharePointData.NewCustomersInSharePoint
Dim newCust As Customer = New Customer()
With newCust
.ContactName = spCust.FirstName & " " & spCust.LastName
.Address = spCust.Address
.City = spCust.City
.PostalCode = spCust.PostalCode
.Region = spCust.Region
'Set the CopiedToDatabase field of the item in SharePoint.
spCust.CopiedToDatabase = "Yes"
End With
Next
Me.DataWorkspace.SharePointData.SaveChanges()
End Sub
partial void ImportCustomers_Execute()
{
foreach (SharePointCustomer spCust in
this.DataWorkspace.SharePointData.NewCustomersInSharePoint())
{
Customer newCust = new Customer();
newCust.ContactName = spCust.FirstName + " " + spCust.LastName;
newCust.Address = spCust.Address;
newCust.City = spCust.City;
newCust.PostalCode = spCust.PostalCode;
newCust.Region = spCust.Region;
//Set the CopiedToDatabase field of the item in SharePoint.
spCust.CopiedToDatabase = "Yes";
}
this.DataWorkspace.SharePointData.SaveChanges();
}
데이터 저장
일반적으로 화면에서 저장 단추를 클릭할 때 보류 중인 변경 내용이 데이터 원본에 커밋됩니다.그러나, 데이터 원본의 SaveChanges 메서드를 호출하는 코드를 추가하여 보류된 변경 사항을 커밋할 수 있습니다.이러한 작업을 수행하려면 이 코드를 추가해야 합니다.
다른 데이터 소스에 있는 데이터에 대해 변경한 사항을 커밋합니다.
화면의 Save 이벤트를 재정의합니다.
다른 데이터 소스에 있는 데이터의 변경 사항을 커밋
사용자 지정 코드를 작성하는 파일은 기본 데이터 원본을 갖습니다.LightSwitch 솔루션에 있는 다른 데이터 원본에서 데이터를 수정하는 사용자 지정 코드를 추가하면 해당 데이터 원본의 SaveChanges 메서드를 호출하여 이러한 변경 내용을 커밋해야 합니다.
다음 예제는 사용자가 Order 엔터티를 화면에서 만들고 저장 단추를 클릭할 때 실행하는 코드를 보여줍니다.Order Details 엔터티의 필드를 사용하여 Products 엔터티에서 필드를 업데이트 하는 코드입니다.제품 엔터티가 다른 데이터 소스에 있기 때문에 이 코드는 데이터 소스의 SaveChanges 메서드를 호출하여 변경 사항을 커밋합니다.
Private Sub Orders_Inserting(entity As Order1)
For Each detail In entity.Order_Details
detail.Product.UnitsInStock = detail.Product.UnitsInStock - detail.Quantity
Next
Me.DataWorkspace.ProductDataSource.SaveChanges()
End Sub
partial void Orders_Inserting(Order1 entity)
{
foreach (Order_Detail1 detail in entity.Order_Details)
{
detail.Product.UnitsInStock = (short?)
(detail.Product.UnitsInStock - detail.Quantity);
}
this.DataWorkspace.ProductDataSource.SaveChanges();
}
화면의 저장 이벤트 재정의
Save 이벤트를 재정의해서 화면에서 저장 단추의 동작을 변경할 수 있습니다.저장 단추의 동작을 바꾸기 때문에 보류 중인 변경 내용을 커밋할 때는 코드에서 SaveChanges 메서드를 호출해야 합니다.
다음 예제에서는 고객 화면의 Save 이벤트를 재정의해서 저장 작업이 실패할 때 나타날 특정 예외를 찾아서 처리합니다.
Private Sub CustomersListDetail_Saving(ByRef handled As Boolean)
Try
Me.DataWorkspace.SharePointData.SaveChanges()
Catch ex As DataServiceOperationException
If ex.ErrorInfo = "DTSException" Then
Me.ShowMessageBox(ex.Message)
Else
Throw ex
End If
End Try
handled = True
End Sub
partial void CustomersListDetail_Saving(ref bool handled)
{
try
{
this.DataWorkspace.SharePointData.SaveChanges();
}
catch (DataServiceOperationException ex)
{
if (ex.ErrorInfo == "DTSException")
{
this.ShowMessageBox(ex.Message);
}
else
{
throw ex;
}
}
handled = true;
}
데이터 유효성 검사
엔터티의 필드에 사용자 지정 유효성 검사 규칙을 적용할 수 있습니다.사용자가 유효성 검사 규칙에 맞지 않는 방식으로 속성 값을 수정할 때 나타나는 사용자 지정 오류 메시지를 추가할 수 있습니다.자세한 내용은 방법: 데이터 유효성 검사를 참조하십시오.
데이터에 대한 권한 설정
기본적으로 모든 사용자는 화면에 나타나는 데이터를 보거나 삽입, 삭제 또는 업데이트할 수 있습니다.그러나 다음 메서드 중 하나에 코드를 추가하여 이러한 권한을 제한할 수 있습니다.
CanRead
CanInsert
CanDelete
CanUpdate
이러한 메서드를 사용하여 작업에 제한을 두면 LightSwitch은 무제한 권한이 없는 사용자에게는 사용할 수 없게 합니다.자세한 내용은 방법: 데이터 이벤트 처리를 참조하십시오.
다음 예제에서는 업데이트 권한이 있는 사용자가 고객 정보를 업데이트할 수 있도록 설정합니다.이 코드 예제에서는 이름이 RoleUpdate인 권한 그룹이 필요합니다.응용 프로그램에 권한 그룹을 추가하는 방법에 대한 자세한 내용은 권한 부여 사용 및 권한 만들기를 참조하십시오.
Private Sub Customers_CanUpdate(ByRef result As Boolean)
result = Me.Application.User.HasPermission(Permissions.RoleUpdate)
End Sub
partial void Customers_CanUpdate(ref bool result)
{
result = this.Application.User.HasPermission(Permissions.RoleUpdate);
}
기본적으로 LightSwitch는 사용자가 정보를 보거나 삽입, 삭제 또는 업데이트할 때 이러한 메서드를 호출합니다.데이터를 읽거나 수정하기 전에 사용자 지정 코드에서 이러한 메서드를 호출할 수도 있습니다.
변경 집합 사용
변경 내용이 데이터 원본에 커밋되기 전에 보류 중인 변경 사항을 식별 및 취소할 수 있습니다.다음 예제는 보류 중인 변경 내용을 식별 및 취소하는 세 개의 사용자 메서드를 보여 줍니다.UndoAllCustomerUpdates 메서드는 모든 고객에게 적용한 변경 사항을 모두 취소합니다.UndoAllUpdates 메서드는 데이터 원본에 적용한 변경 사항을 모두 취소합니다.UndoCustomerEdit 메서드는 고객 화면에서 현재 선택한 데이터 행에 적용한 변경 사항을 모두 취소합니다.
Private Sub UndoAllCustomerUpdates_Execute()
For Each Cust As Customer In _
Me.DataWorkspace.NorthwindData.Details. _
GetChanges().OfType(Of Customer)()
Cust.Details.DiscardChanges()
Next
End Sub
Private Sub UndoAllUpdates_Execute()
Me.DataWorkspace.NorthwindData.Details.DiscardChanges()
End Sub
Private Sub UnduCustomerEdit_Execute()
Customers.SelectedItem.Details.DiscardChanges()
End Sub
partial void UndoAllCustomerUpdates_Execute()
{
foreach (Customer cust in
this.DataWorkspace.NorthwindData.Details.
GetChanges().OfType<Customer>())
{
cust.Details.DiscardChanges();
}
}
partial void UndoAllUpdates_Execute()
{
this.DataWorkspace.NorthwindData.Details.DiscardChanges();
}
partial void UndoCustomerEdit_Execute()
{
Customers.SelectedItem.Details.DiscardChanges();
}
모델링된 쿼리 확장
쿼리 디자이너의 기능을 넘어 쿼리를 수정하려는 경우에 쿼리 PreProcessQuery 메서드에 코드를 추가하여 쿼리를 확장할 수 있습니다.자세한 내용은 방법: 코드를 사용하여 쿼리 확장를 참조하십시오.