2014-10-05 80 views
0

我剛開始用MVC工作,現在我想設置兩個表之間的關係如何設置MVC .NET兩個表之間的關係

這裏是我的Employee表

ID |名稱|薪水| Deptid

這裏是我的Deparrtment表

Deptid | DEPTNAME

,現在我有一個創建視圖將數據插入我的Employee表

像這樣

名稱:..................
薪酬:................
DEPTID:與各部門的列表下拉[但當我把它保存在表中應該保存相應的DEPTID只有]

而且在這裏你可以看到我創建的模型

public class Employee 
{ 
    public int id { get; set; } 
    public string Name { get; set; } 
    public int Salary { get; set; } 
    public int Deptid { get; set; } 
} 

這裏是我的其他模型部

public class Department 
{ 
    [Key] 
    public int Deptid { get; set; } 
    public string Deptname { get; set; } 
    public List<Employee> Employees { get; set; } 
} 

我已創建了一個多類的DbContext

public class Employeecontext:DbContext<br> 
{ 
    public DbSet<Employee>Employees{get;set;} 
    public DbSet<Department>Departments{get;set;} 
} 

因此,作爲陳述之前,我必須從那裏我將收集的數據創建視圖和將它們存儲在Employees表中,但是一個標準是在下拉列表中我將有部門名稱,但我想要將相應部門的deptid保存在表中。

在此先感謝和抱歉,如果沒有提到的東西或做我是新手任何錯誤:P

+0

部門表已經有我手動輸入的值:) – Melvin 2014-10-05 16:55:23

回答

1

試試下面的代碼對你的實體類。你的db-context類是OK的。我已經在C#MVC4應用程序中測試了以下模式,而沒有使用代碼優先方法的任何問題。

public class Department 
{ 

    public Department() 
    { 
     List<Employee> EmployeeList = new List<Employee>(); 
    } 

    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int Deptid { get; set; } 
    public string Deptname { get; set; } 

    public virtual ICollection<Employee> Employees { get; set; } 
} 


public class Employee 
{ 

    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int id { get; set; } 
    public string name { get; set; } 
    public int Salary { get; set; } 
    public int Deptid { get; set; } 

    [ForeignKey("Deptid ")] 
    public virtual Department department { get; set; } 
} 
+0

我改變了我的模型到你給的,但是當我點擊提交按鈕時,我得到這個錯誤INSERT語句與FOREIGN KEY約束衝突「FK_dbo.Employees_dbo.Departments_Deptid」 。衝突發生在數據庫「MELVIN」,表「dbo.Departments」,「Deptid」列中。 該聲明已被終止。 – Melvin 2014-10-05 18:05:05

+0

這裏是我的控制器代碼視圖創建[HttpGet] public ActionResult Create() { ViewBag.dropdownlist = new SelectList(db。部門,「Deptid」,「Deptname」); return View(); } [HttpPost] public ActionResult Create([Bind(Include =「id,Name,Salary,Deptid」)] Employee emp) { db.Employees.Add(emp); db.SaveChanges(); return View(); } – Melvin 2014-10-05 18:06:25

+0

啊。這可能是因爲現有的數據,或者您可能試圖將值添加到主(部門)表中不可用的fk字段。你不能在fk字段中有主表(deptmnt)中沒有的值。檢查一下。代碼對我來說非常完美。 – 2014-10-05 18:12:59

1

你可以做這樣的事情:

public class Employee 
{ 
    public int id { get; set; } 
    public string Name { get; set; } 
    public int Salary { get; set; } 
    public int Deptid { get; set; } 

    [ForeignKey("Deptid")] 
    public virtual Department Department { get; set; } 
} 

public class Department 
{ 
    [Key] 
    public int Deptid { get; set; } 
    public string Deptname { get; set; } 
} 

您不必在您的部門的員工的名單,因爲它只能依賴於部門。