ASP.NET MVC3とEF4.3.1、および「EF 4.x DbContext Generator forC#」拡張機能を使用しています。リポジトリパターンを使用しています。
私が抱えている問題は、EFが、期待する場合にアソシエーションを設定していないことです。すべての協会の人口を誘発するために私がしなければならないことがありますか?
たとえば、プロパティ「CompanyPartyId」と「EmployeePartyId」を含む割り当てモデルがあります。これらのプロパティには両方とも、Parties.PartyIdへのFKがあります。これにより、Party(CompanyPartyIdで指定されたPartyを指す)とParty1(EmployeePartyIdで指定されたPartyを指す)の2つの関連付けが存在します。
何らかの理由で、新しい割り当てを保存して取得した後、パーティの関連付けはnullになります。CompanyPartyIdプロパティとEmployeePartyIdプロパティはどちらも、Parties.PartyIdに存在する値に設定されます。他のいくつかのプロパティ/関連付けでも同様の問題があります。プロパティはnullではなく、有効な値が含まれていますが、関連付けはnullです。
関連する場合、Assignmentは複合キーを使用します。CompanyPartyId、EmployeePartyId、AssignmentTypeCode、およびAssignmentStartDate。
私のコントローラーのコードは次のようになります(検証と無関係なロジックを省略):
[HttpPost]
[Authorize(Roles = "assignment_edit")]
public ActionResult Create(AssignmentViewModel assignment)
{
var newAssignment = assignment.NewAssignment;
partiesRepository.SaveAssignment(newAssignment);
var savedAssignment =
partiesRepository.Assignments.First(x => x.CompanyPartyId == newAssignment.CompanyPartyId &&
x.EmployeePartyId == newAssignment.EmployeePartyId &&
x.AssignmentTypeCode == newAssignment.AssignmentTypeCode &&
x.AssignmentStartDate == newAssignment.AssignmentStartDate);
var companyPartyId = savedAssignment.CompanyPartyId; // 1
var companyParty = savedAssignment.Party; // null
var employeePartyId = savedAssignment.EmployeePartyId; // 2
var employeeParty = savedAssignment.Party1; // not null
return View("Index");
}
リポジトリコードは単純です。
public IQueryable<Assignment> Assignments
{
get { return _context.Assignments; }
}
public void SaveAssignment(Assignment assignment)
{
var data = (from a in _context.Assignments
where a.CompanyPartyId == assignment.CompanyPartyId
&& a.EmployeePartyId == assignment.EmployeePartyId
&& a.AssignmentTypeCode == assignment.AssignmentTypeCode
&& a.AssignmentStartDate == assignment.AssignmentStartDate
select a);
if (!data.Any())
{
_context.Assignments.Add(assignment);
}
_context.SaveChanges();
}