Asp.net mvc 5 更新模型后如何从实体框架返回所有数据

Asp.net mvc 5 更新模型后如何从实体框架返回所有数据,asp.net-mvc-5,entity-framework-6,Asp.net Mvc 5,Entity Framework 6,我使用的是VS2015社区版MVC5-EF6 我创建了一个简单的模型及其CRUD操作。模型:个人,字段(Id,名字,姓氏,出生日期…) 当我更新模型时(添加了两个带有默认值的引用字段) 在Person模型中添加的字段:(National_Id,City_Id),每个字段都是National和City表的外键 当我返回到Index方法时 // GET: public ActionResult Index() { List<Person> persons = db.Person

我使用的是VS2015社区版MVC5-EF6

我创建了一个简单的模型及其CRUD操作。模型:个人,字段(Id,名字,姓氏,出生日期…)

当我更新模型时(添加了两个带有默认值的引用字段)

在Person模型中添加的字段:(National_Id,City_Id),每个字段都是National和City表的外键

当我返回到Index方法时

// 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; }
}
//获取:
公共行动结果索引()
{
List persons=db.persons.ToList();
返回视图(人);
}
公共阶层人士
{
公共int Id{get;set;}
公共字符串DocumentCode{get;set;}
公共字符串名称1{get;set;}
公共字符串名称2{get;set;}
公共字符串名称3{get;set;}
公共字符串名称4{get;set;}
公共日期时间出生日期{get;set;}
公共广播地址{get;set;}
}
公共课堂演讲
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表人员{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);
    }
//获取:人
公共行动结果索引()
{
List persons=db.persons.ToList();
返回视图(人);
}
//获取:人/创建
公共操作结果创建()
{
ViewBag.Addresses=新的选择列表(db.address,“Id”,“Name”);
返回视图();
}
//职位:人员/创建
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果创建([Bind(Include=“Id,DocumentCode,Name1,Name2,Name3,Name4,出生日期,地址”)]个人)
{
if(ModelState.IsValid)
{
db.Persons.Add(人);
db.SaveChanges();
返回操作(“索引”);
}
返回视图(人);
}
下面是create视图中的一段代码(应该负责从视图中检索数据)


@Html.LabelFor(model=>model.Address,ClinicDemo.App_Start.SystemTranslation.Address,htmlAttributes:new{@class=“control label col-md-2”})
@DropDownList(“Address_Id”,(IEnumerable)ViewBag.Addresses,new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.Address,“,new{@class=“text danger”})
下面是一段代码,它应该根据地址id查看地址名称,即使在一些硬编码数据中,它仍然是空的

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

@DisplayFor(modelItem=>item.Address.Name)
persons对象返回所有没有新字段的数据,即使我从数据库手动设置了这些字段,当我添加新person时,除了这些字段之外,所有数据都设置正确


是否有帮助?

不会为旧数据填充默认值,您需要自己对数据库进行更改。应该很简单:

update Person set FieldName = "defaultvalue"

新数据中也存在这个问题。这是当save new record
无法将值NULL插入表“aspnet-ClinicDemo-20151204092505.dbo.People”的“Address_Id”列时出现的错误;列不允许空值。插入失败。
请发布用于添加记录的完整代码。在上述情况下,您似乎没有设置AddressId字段,该字段必须不为空。请显示新的
人员
类以及创建新的
人员
的代码。如果没有它,很难猜出哪里出了问题。
update Person set FieldName = "defaultvalue"