2017-02-07 7 views
0

私はテーブルにCompanyとRolesが1対多の関係になっています。私は遅延ロード設定のために、RoleエンティティのFK値が会社のPK値と同期するように自動的に設定されるべきであることを知っています。 Companyテーブルでは、会社エンティティインスタンスが追加されていますが、新しいロールエンティティインスタンスを追加すると何らかの理由で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

はい残念ですが、新しい役割を追加すると、CompanyテーブルのPK値からFK値を取得する必要がありますが、代わりにRolesテーブルにnullが返されます。私のケースのRoleテーブルでは、子テーブルに新しいエンティティを追加すると、PKとFKが同期するはずです。 –

+0

私はその逆を考えました。 PKテーブルに新しいエントリを追加し、FKテーブルに再度追加します – Steve

答えて

1

あなたが定義したPK_FK関係は、あなたの役割テーブルの会社フィールドが有効なIDを持っていることが確実になります。コードが指示しない限り、それが属する会社を「推測」することはできません。

「作成」メソッドで定義/作成するロールには、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); 
} 
関連する問題