2015-08-21 3 views
0

как обращаться с одним из многих отношений.обрабатывать отношения для многих при обновлении db

Модели:

public partial class Student 
{ 
    public student() 
    { 
     this.Courses = new HashSet<Course>(); 
    } 

    public int pkID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Course> Courses { get; set; } 
} 

public partial class Course 
{ 
    public int pkID { get; set; } 
    public Nullable<int> fkStudentID { get; set; } 
    public string Name { get; set; } 

    public virtual Student Student { get; set; } 
} 

Контроллер:

public ActionResult Create([Bind(Include = "pkID,Name")] Student student) 
{ 
    student.Courses.Add(course); // How to fetch course from the Student/Create.cshtml and convert it to type Course 
    db.Students.Add(student); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 

Вид:

// Student/Create.cshtml 
@model School.Student 
@{ 
    ViewBag.Title = "Create"; 
} 
<div> 
    @Html.ActionLink("Tillbaka till lista", "Index") 
</div> 


@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Name, "Namn", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("Name", null, htmlAttributes: new { @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Courses, "Kurs", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("Courses", null, htmlAttributes: new { @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.Courses, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
} 

Рассматриваются вопросы, как извлечь данные курсы из .cshtml и обновления БД. В функции create я получаю только что полученное имя, я знаю, что можно использовать Request [«Курсы»], но как его сохранить в таблице курсов?

Спасибо!

+0

Вопрос не ясен, можете ли вы подробно рассказать, что вы ищете? – Ravi

+0

Ravi Я хочу добавить курсы для ученика, когда пользователь добавляет курс, я не знаю, как получить выбранное значение из .cshtml для моей функции post/create? –

+0

, так что у вас есть один выбор или множественный выбор Coure? – Ravi

ответ

0

Ну ... Как уже упоминалось выше, сам вопрос немного неясен, но я дам ему шанс. В реляционных базах данных многие отношения знают об одном сущности, а не наоборот. Это означает, что первичный ключ одного отношения - это внешние ключи во многих отношениях.

Это, в EF, когда вы создаете контейнер внутри класса (или таблицы), этот контейнер, являющийся многими отношениями, будет иметь ключевую ссылку с одним отношением, и вы можете использовать ее для поиска определенного отношения.

Если does't ответить на ваш вопрос, я рекомендую смотреть на этом уроке: http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx

+0

Эй Спасибо, я видел учебник, но он не помогает. Мой вопрос: я хочу добавить курс в db, чтобы сделать это, я должен извлечь его из файла .cshtml, где пользователь его выбрал, поэтому, когда пользователь добавляет курс и нажимает create. Вызывается функция Post/create, и здесь я получаю свойство Student не выбранным курсом, поэтому как получить выбранный курс и добавить его в db? –

1

Для одного подбора курса вы добавить один столбец в классе Student, как public int CourseId{get;set;} и с точки зрения вы поставите как

@Html.DropDownListFor(m => m.CourseId, new SelectList(Model.Courses, "pkID", "Name"), new { @class = "form-control" }) 

@Html.ValidationMessageFor(model => model.CourseId, "", new { @class = "form-control" }) 

Теперь, когда вы отправляете форму после выбора курса, вы получите выбранный курс в ActionResult Создайте как student.CourseId.

Позвольте мне знать, если вам не нужна дополнительная помощь

+0

Спасибо, Рави, а как насчет множественного выбора? –

0

Для множественного выбора нет необходимости, чтобы добавить новый столбец в CourceId в классе Student, вы можете сделать, как показано ниже

var i=0, html=""; 
 
$("#CourseId option:selected").each(function() {   
 
    var courseId = $(this).val(); 
 
    html += '<input type="hidden" name="Courses[' + i + '].pkID" id="Courses_' + i + '" value="' + courseId + '"/>'; 
 
       i = i + 1; 
 
}); 
 

 
$("#divDummy").html(html);

здесь, предполагая, что CourseId является идентификатором вашего раскрывающегося списка и divDummy, вы берете один пустой div внутри вашей формы. Теперь после отправки вы получите список выбранного идентификатора курса как student.Courses и выше javascript следует вызвать перед отправкой формы.

Дайте мне знать, если вам нужна помощь.

+0

Мне действительно нужен javascript, чтобы получить несколько выбранных курсов? не должен ли быть другой способ получить и обновить связанные данные в EF? Я попробую ваш предложенный метод, спасибо, что нашли время, помогая мне Рави –

Смежные вопросы