Witam.
Mam problem z dodaniem pracownika do harmonogramu zajęć. Nie wiem jak do końca to zrobić.
Postaram się wytłumaczyć co próbowałem zrobić.
Model Person.cs
public abstract class Person
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PersonId { get; set; }
public long Pesel { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public DateTime DateOfBirth { get; set; }
[NotMapped]
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
}
Model Employee.cs
public class Employee : Person
{
public Employee()
{
EmployeeSchedule = new HashSet<EmployeeSchedule>();
}
public int Salary { get; set; }
public DateTime Hiredate { get; set; }
public bool isManager { get; set; }
public virtual ICollection<EmployeeSchedule> EmployeeSchedule { get; set; }
}
model EmployeeSchedule.cs
public class EmployeeSchedule
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int EmployeeScheduleId { get; set; }
//Table: Godziny_prac
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string DayOfWeek { get; set; }
[Required]
public virtual Employee Employee { get; set; }
[NotMapped]
[Display(Name = "Pracownik")]
public string EmployeeIN
{
get
{
DbContext db = new DbContext();
try
{
var k = db.Employee.Find(Employee);
return k.FullName;
}
catch { return ""; }
}
}
}
Przy tworzeniu harmonogramu pracy(EmployeeSchedule) chcę z DropDownList wybrać konkretnego pracownika i dodać to powiązanie do bazy. Lista wyświetla się prawidłowo.
EmployeeScheduleController.cs
public ActionResult Create()
{
ViewBag.PersonId = new SelectList(db.Employee, "PersonId", "FullName");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "EmployeeScheduleId,StartTime,EndTime,DayOfWeek")] EmployeeSchedule employeeSchedule)
{
ViewBag.PersonId = new SelectList(db.Employee, "PersonId", "FullName");
ViewData["DayOfWeek"] = new SelectList(selectDays, "Key", "Value");
if (ModelState.IsValid)
{
Employee employee = db.Employee.Find(employeeSchedule.Employee);
employee.EmployeeSchedule.Add(employeeSchedule);
db.EmployeeSchedule.Add(employeeSchedule);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(employeeSchedule);
}
Create.cshtml
<div class="form-group">
@Html.LabelFor(model => model.Employee.PersonId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("PersonId", String.Empty)
@Html.ValidationMessageFor(model => model.Employee.PersonId, "", new { @class = "text-danger" })
</div>
</div>
Jak sprawdzam debuggerem to wychodzi, że problem tkwi właśnie w przypisaniu pracownika. Wartość employee równa się null. Gdzie robię żle?