asp.net身份,连接更多表

时间:2016-08-22 09:27:32

标签: asp.net asp.net-mvc asp.net-identity

在ASP.NET身份

AspNetUsersid

我创建了另一个表名Staff

我将两个表格与AspNetUsers id关联到员工表格列Staff_ID

  

(两个表都是nvarchar(128))

我在视觉工作室CRUD工作人员

当我创建新记录时,在Staff_ID字段中,它会在下拉列表中向我显示AspNetUser中的完整用户列表。

我不想要这个下拉列表。

我想将记录保存到用户Logged-in。 (我不想从列表中选择)

// 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>

1 个答案:

答案 0 :(得分:0)

首先,这只是一对多的脚手架的默认行为。您不必使用脚手架代码,事实上,您不应该鼓励使用脚手架代码。其次,你把它建模为一对多,这显然是不正确的。 A&#34;用户&#34;是一个&#34;员工&#34;。第三,这是一个关系应该是你的第一个线索,这是完全错误的建模。这种关系意味着继承。因此,Staff应该继承ApplicationUser,因为它只是一种更具体的&#34;用户&#34;。

身份存在的全部原因是提供这种级别的扩展。否则,您可以坚持使用ASP.NET Membership的配置文件模型。