2015-12-08 2 views
0

Я использую VS2015 Community Edition MVC5 - EF6Как вернуть все данные из Entity Framework после обновления модели

Я создал простую модель и ее операции CRUD. Модель: Person, Fields (Id, FirstName, LastName, DateofBirth ...).

Когда я обновил модель (добавлено два поля «Ссылки» со значениями по умолчанию).

Добавленные поля для модели Person: (national_Id, City_Id), каждый из которых является иностранными ключами по национальности и таблицам City.

Когда я вернулся в индексный метод

// GET: 
public ActionResult Index() 
{ 
    List<Person> persons = db.Persons.ToList(); 
    return View(persons); 
} 


public class Person 
{ 
    public int Id { get; set; } 
    public string DocumentCode { get; set; } 
    public string Name1 { get; set; } 
    public string Name2 { get; set; } 
    public string Name3 { get; set; } 
    public string Name4 { get; set; } 
    public DateTime DateOfBirth { get; set; } 
    public Address Address { get; set; } 
} 

public class Address 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<Person> persons { get; set; } 
} 

Вот некоторые методы контроллера

// GET: People 
    public ActionResult Index() 
    { 
     List<Person> persons = db.Persons.ToList(); 
     return View(persons); 
    } 


    // GET: People/Create 
    public ActionResult Create() 
    { 
     ViewBag.Addresses = new SelectList(db.Adresses, "Id", "Name"); 
     return View(); 
    } 

    // POST: People/Create 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "Id,DocumentCode,Name1,Name2,Name3,Name4,DateOfBirth,Address")] Person person) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Persons.Add(person); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(person); 
    } 

Вот кусок кода создать вид (должен отвечать на извлечение данных из поля зрения)

<div class="form-group"> 
     @Html.LabelFor(model => model.Address, ClinicDemo.App_Start.SystemTranslation.ADDRESS, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("Address_Id", (IEnumerable<SelectListItem>)ViewBag.Addresses, new { @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.Address, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

Ниже приведен фрагмент кода, который должен содержать имя адреса в зависимости от объявления. dress_id, она по-прежнему пуст, даже в некоторых трудно закодированных данных

<td> 
     @Html.DisplayFor(modelItem => item.Address.Name) 
    </td> 

лица объекта возвращает все данные без новых полей, даже когда я установить их вручную из базы данных, при добавлении нового человека все данные установлены правильно, за исключением тех полей,

Любая помощь?

+0

Пожалуйста, покажите новый класс 'Person' и код, в котором вы создадите новый' Person'. Трудно догадаться, что случилось без него. –

ответ

0

Значения по умолчанию для старых данных не будут заполняться, вам необходимо внести эти изменения в базу данных самостоятельно. Должно быть довольно просто:

update Person set FieldName = "defaultvalue" 
+0

проблема также в новых данных. Это ошибка при сохранении новой записи 'Невозможно вставить значение NULL в столбец 'Address_Id', table 'aspnet-ClinicDemo-20151204092505.dbo.People'; столбец не допускает нулей. INSERT не работает. ' –

+0

Пожалуйста, напишите полный код, который вы используете для добавления записей. В вышеприведенном случае похоже, что вы не устанавливаете поле AddressId, которое должно быть не нулевым. – Woland

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