2016-08-22 49 views
0

在ASP.NET身份asp.net身份,連接多個表

AspNetUsersid

我創建另一個表名Staff

我兩個表與AspNetUsersid員工表列Staff_ID鏈接

(兩個表都是nvarchar(128))

我CRUD工作人員在Visual Studio

當我創造了新的記錄,在Staff_ID場,它讓我在AspNetUser在下拉列表中的用戶的完整列表。

我不想要這個下拉列表。

我想將記錄保存到用戶登錄。 (我不想從列表中選擇)

// POST: Staffs/Create 
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "Staff_ID,First_Name,Designation,Department,Employment_Type,Clinic_ID,Title,Middle_Name,Last_Name,DOB,Gender,Marital_Status,Religion,CNIC,Nationality,Hire_Date,Employment_Status,Address,City,Country,Email,Contact_Number,Education,Salary,Leave_Avail,Leave_Details,Loan_Details")] Staff staff) 
{ 
    if (ModelState.IsValid) 
    { 
     //db.Staffs.Add(staff); 
     //db.SaveChanges(); 
     //return RedirectToAction("Index"); 
     staff.Staff_ID = User.Identity.GetUserId(); 
     db.Staffs.Add(staff); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    ViewBag.Staff_ID = new SelectList(db.AspNetUsers, "Id", "ClinicName", staff.Staff_ID); 
    ViewBag.Country = new SelectList(db.Countries, "Country_ID", "Country_Name", staff.Country); 
    return View(staff); 
} 

筆者認爲:

<div class="form-group"> 
    @Html.LabelFor(model => model.Staff_ID, "Staff_ID", htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownList("Staff_ID", null, htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.Staff_ID, "", new { @class = "text-danger" }) 
    </div> 
</div> 

回答

0

首先,這是一個一對多的支架只是默認行爲。您不必使用腳手架代碼,事實上,您不鼓勵您。其次,你已經將這個模型化爲一對多,這顯然是不正確的。 「用戶」是「職員」。第三,這是一種關係應該是你的第一個線索,這是完全錯誤地建模。這種關係意味着繼承。所以Staff應該從ApplicationUser繼承,因爲它只是一個更具體的「用戶」類型。

身份存在的全部原因是提供這種級別的擴展。否則,您可以堅持使用ASP.NET Membership的配置文件模型。

+0

我知道了,先生,你可以提出任何解決方案嗎? –

+0

這是1:1的關係 –