Ok - 데이터베이스, 직원 및 회사에 두 개의 테이블이 있습니다. 여기에 각각의 기본 스키마가 있습니다ASP.NET MVC, LINQ 및 UpdateModel 문제
Table Companies
CompanyID - GUID - PK
CompanyName - NVarChar(100)
Other Descriptive Fields....
Table Employees
EmployeeID - GUID - PK
CompanyID - GUID - FK
Employee Descriptive Fields...
이제는 각 회사가 여러 직원을 가질 수 있으므로 일대일 관계가 있습니다. 다음 함수를 사용하여 직원 클래스에 대한 dataRepository를 만들었습니다.
Public Function GetEmployee(ByVal company As String, ByVal id As Guid) As DB.EmpWithComp.employee
Dim emp As DB.EmpWithComp.employee = (From e In db.employees Where e.employeeID = id And e.company.companyName= company Select e).Single
Return emp
End Function
Public Sub save()
db.SubmitChanges()
End Sub
모든 것이 지금까지 훌륭하게 작동합니다. 이 문제는 직원을 편집해야 할 때 발생합니다. 내 컨트롤러 기능은 다음과 같습니다
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal id As Guid, ByVal company As String, ByVal formValues As FormCollection) As ActionResult
Dim e As New DB.EmpWithComp.employee
e = db.GetEmployee(company, id)
Try
UpdateModel(e)
db.save()
Return RedirectToAction("Index")
Catch ex As Exception
Return View(e)
End Try
End Function
Function Edit(ByVal id As Guid, ByVal company As String) As ActionResult
Dim e As New DB.EmpWithComp.employee
e = db.GetEmployee(company, id)
If Not e Is Nothing Then
Return View(e)
Else
Return View("~/Views/Admin/Employees/NotFound.aspx")
End If
End Function
직원이 발견되고 편집 양식이 채워지고 게시 기능이 실행됩니다. 그러나 실제 설명이 없으면 내 updateModel이 실패합니다. updateModel을 통과하는 코드를 추적하고 모든 속성에 올바른 값이 할당되었습니다. updateModel가 LinqToSql 클래스의 다음 섹션에 도달 그러나, 회사의 가치는 아무것도이며,이 내가 FK 관계와 실종 무엇 실패
<Association(Name:="company_employee", Storage:="_company", ThisKey:="companyID", IsForeignKey:=true)> _
Public Property company() As company
Get
Return Me._company.Entity
End Get
Set
Dim previousValue As company = Me._company.Entity
**If ((Object.Equals(previousValue, value) = false) _
OrElse** (Me._company.HasLoadedOrAssignedValue = false)) Then
Me.SendPropertyChanging
If ((previousValue Is Nothing) _
= false) Then
Me._company.Entity = Nothing
previousValue.employees.Remove(Me)
End If
Me._company.Entity = value
If ((value Is Nothing) _
= false) Then
value.employees.Add(Me)
Me._companyID = value.companyID
Else
**Me._companyID = CType(Nothing, System.Guid)**
End If
Me.SendPropertyChanged("company")
End If
End Set
End Property
의 원인이 무엇입니까? 회사의 이전 값은 UpdateModel로 전달되는 올바른 값으로 설정되지만 현재 값은 설정되지 않습니다. 수동으로 각 속성 (e.firstname = request ("firstname") 등)을 설정하고 dataRepository에서 내 save 메서드를 호출하거나 관계를 제거하고 UpdateModel을 사용하면 모든 것이 제대로 작동합니다. 차라리 UpdateModel을 사용하면 코드 정리가 빨라집니다. 긴 게시물을 유감스럽게 생각합니다. 그러나 이것이 나를 괴롭 히고 있습니다. 어떤 아이디어?
나는 현재 직원 이름을 업데이트하기 만하면 FK를 변경하려고하지 않습니다.
아니, 내보기는 직원 데이터 항목 (이름, 성 등)이다. 이 두 테이블 간의 관계는 특정 회사의 직원 목록을 제공 할 수있게하는 것입니다. 뷰는 데이터와 올바르게 바인딩되지만 모델을 업데이트 할 때 질식합니다. UpdateModel이 화가 나고있는 것처럼 보입니다. 직원 레코드에 대한 FK 제약 조건을 포함하여 회사 자격과 관련이있는 것은 아니지만 양식에서 돌아 오는 회사 엔티티가 없다는 것입니다. – Tommy
이제 귀하의 문제를 이해하고 답변을 업데이트했습니다. –
감사합니다. 완벽하게 작동합니다! 늦은 응답으로 미안합니다. 이번 주말에 코딩하지 않았습니다. – Tommy