2017-02-07 10 views
0

일대 다 관계의 테이블 회사 및 역할이 있습니다. 게으른 로딩 설정의 경우 역할 엔터티의 FK 값이 회사의 PK 값과 동기화되도록 자동으로 설정되어야합니다. 회사 테이블에 회사 엔티티 인스턴스가 추가되었지만 새 역할 엔티티 인스턴스를 추가 할 때 어떤 이유로 인해 null이 추가됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? ASP.net MVC : 1 대 다수의 지연로드에서 PK와 FK 값이 동기화되지 않습니다.

이러한 내 도메인 클래스와 상황은 다음과 같습니다

public class Company 
{ 
    public Company() 
    { 
     Roles = new List<Role>(); 
     Employees = new List<Employee>(); 
    } 

    public int CompanyId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string PhoneNo { get; set; } 
    public string Email { get; set; } 
    public virtual ICollection<Role> Roles { get; set; } 
    public virtual ICollection<Employee> Employees { get; set; } 
} 

public class Role 
{ 
    public Role() 
    { 
     RoleOverviews = new List<RoleOverview>(); 
    } 
    public int RoleId { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public virtual Company Company { get; set; } 
    public ICollection<RoleOverview> RoleOverviews { get; set; } 

} 

public class AppDbContext:DbContext 
{ 
    public DbSet<Company> Companies { get; set; } 
    public DbSet<Role> Roles { get; set; } 
    public DbSet<RoleOverview> RoleOverviews { get; set; } 
    public AppDbContext() : base("DefaultConnection") 
    { 
    } 
} 

public ActionResult Create([Bind(Include = "RoleId,Name,Description")] Role role) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Roles.Add(role); 
     db.SaveChanges(); 
     return RedirectToAction("Index", "CompaniesRolesMV"); 
    } 

    return View(role); 
} 
+1

'에 대한 그것은 null이 추가 된 몇 가지 이유가 무엇입니까? 문제가 무엇인지, 문제가 발생한 곳을 명확하게 설명하지 않았습니다. – DaniDev

+0

예 죄송합니다. 새 역할을 추가 할 때 회사 테이블의 PK 값에서 FK 값을 가져오고 대신 역할 테이블에서 null을 얻습니다. 필자의 경우 역할 테이블에서 자식 테이블에 새 엔터티를 추가하면 PK와 FK가 동기화되어야합니다. –

+0

나는 그 반대의 생각을했습니다. PK 테이블에 새 항목을 추가 한 다음 FK 테이블에 다시 추가하십시오. – Steve

답변

1

당신은 단지 당신의 역할 테이블에서 회사 필드가 유효한 ID를 가질 것이라고 확신하게됩니다 정의한 PK_FK 관계. 그러나 코드가 알지 못하는 한 그것이 속한 회사를 '추측'할 수는 없습니다.

'작성'메소드에서 정의/작성하는 역할에 제공되는 CompanyID 값이 있어야합니다. (?) 아마도, 사용자가 선택기에서 선택할 수 있습니다

을 당신은 아마 t이보기에 회사 선택기를 정의하고 필요 당신의 그 선택에서 회사 ID를 포함해야한다 방법 활동 작성 :

public ActionResult Create([Bind(Include = "RoleId,Name,Description,CompanyID")] Role role) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Roles.Add(role); 
     db.SaveChanges(); 
     return RedirectToAction("Index", "CompaniesRolesMV"); 
    } 

    return View(role); 
}