Проблема сохранения новых записей в нескольких таблицах из одного представления - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь добавить новые записи в моей БД в несколько связанных таблиц, у всех из которых есть идентификаторы как PK и идентификаторы других таблиц как FK.Мой подход основан на учебном пособии по NerdDinner, но я не могу найти примеров того, как добавлять новые записи в БД, когда задействовано более одной таблицы.

ModelState.IsValid завершается неудачно при попытке сохранитьновые записи по какой-то причине.Я попытался добавить их, как показано ниже, и обновить каждую таблицу отдельно, но это не работает.

Я новичок в MVC, .NET и программировании в целом и не могу понять, что я делаю неправильно.Любая помощь приветствуется.

[HttpPost]
    public ActionResult Create(Team team)
    {

        Team t = team;
        UpdateModel(t);

        if (ModelState.IsValid)
        {

            teamRepository.AddTeam(t);
            teamRepository.Save();

            return RedirectToAction("Details", new { id = t.TeamID });
        }

        return RedirectToAction("Create");
    }

Вот ViewModel, который я использую

public class TeamViewModel
{
    //Properties
    public Team team { get; set; }
    public IQueryable<Department> departmentsList { get; set; }
    public IQueryable<Team> teamList { get; set; }
    public SelectList countriesList { get; set; }
    public Country country { get; set; }
    //Constructors
    public TeamViewModel()
    {

    }

    public TeamViewModel(IQueryable<Team> teams)
    {
         teamList = teams;
    }

    public TeamViewModel(TeamViewModel vm)
    {
        team = vm.team;
        departmentsList = vm.departmentsList;
    }

    public TeamViewModel(TeamViewModel vm, Country c)
    {
        team = vm.team;
        team.CountryID = c.CountryID;
    }

    public TeamViewModel(TeamViewModel vm, IEnumerable<Country> countries)
    {
        team = new Team();
        countriesList = new SelectList(countries, "CountryID", "ShortName");
    }

}

И это View, если он нужен

<% using (Html.BeginForm()) {%>
    <%: Html.ValidationSummary(true) %>

    <fieldset>

    <div class="editor-label"><%: Html.LabelFor(m => m.team.ShortName) %></div>
    <div class="editor-field"><%: Html.TextBoxFor(m => m.team.ShortName) %><%: Html.ValidationMessageFor(m => m.team.ShortName, "*") %></div>

    <div class="editor-label"><%: Html.LabelFor(m => m.team.FullName)%></div>
    <div class="editor-field"><%: Html.TextBoxFor(m => m.team.FullName)%><%: Html.ValidationMessageFor(m => m.team.FullName, "*")%></div>

    <div class="editor-label"><%: Html.LabelFor(m => m.team.DateEstablished)%></div>
    <div class="editor-field"><%: Html.TextBoxFor(m => m.team.DateEstablished)%><%: Html.ValidationMessageFor(m => m.team.DateEstablished, "*")%></div>

    <div class="editor-label"><%: Html.LabelFor(m => m.team.City)%></div>
    <div class="editor-field"><%: Html.TextBoxFor(m => m.team.City)%><%: Html.ValidationMessageFor(m => m.team.City, "*")%></div>

    <div class="editor-label"><%: Html.LabelFor(m => m.team.Country) %></div>
//The misspelled field        
//<div class="editor-field"><%: Html.DropDownListFor(model => model.team.Country, Model.countriesList, "<--Select Country-->") %></div>
//The corrected field  
<div class="editor-field"><%: Html.DropDownListFor(model => model.team.CountryID, Model.countriesList, "<--Select Country-->") %></div>

</fieldset>

<p>
    <input type="submit" value="Save" />
</p>

1 Ответ

1 голос
/ 26 августа 2011

Во-первых, какой репозиторий ORM вы используете?Во-вторых, почему вы переназначаете поля в новый объект Team.Mvc уже сделал это для вас, я не думаю, что вам нужно это делать.Если вы используете что-то NHibernate, то это, вероятно, связано с настройкой Id страны, а не объекта страны.Если у вас есть таблица стран, вы, вероятно, получили объект страны, и поэтому NH будет искать следующую команду:

team.Country.Id

И НЕ

team.CountryId

Глядя на ваше мнение, это тот случай.На вашем месте я бы переназначил объект Team, уже сделанный.Разбейте действие и проверьте объект страны.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...