我想用一些默认商品填充商品列表
public class Data
{
[Key]
public int Id { get; protected set; }
public List<Item> Items { get; set; } = new List<Item>(4) { new Item(), new Item(), new Item(), new Item() };
public DateTime CreationDate { get; protected set; }
public Question()
{
CreationDate = DateTime.Now;
}
}
public class Item
{
[Key]
public int Id { get; protected set; }
public string Text { get; set; } = "";
}
我的控制器中有两种方法:
public ActionResult add(Data data)
{
if (ModelState.IsValid)
{
_db.Data.Add(data);
_db.SaveChanges();
}
return RedirectToAction("getData", new { id = data.Id });
}
public ViewResult getData(string id)
{
var _id = Convert.ToInt32(id);
// Data object is already added to the database with 4 elements
var pre = _db.Data.Find(_id).Items.Count(); // Count's 4 with correct data
var el = _db.Data
.Include(q => q.Items)
.Where(x => x.Id == _id)
.FirstOrDefault();
var post = _db.Data.Find(_id).Items.Count(); // count's 8
return View(el);
}
但是当我执行getData时,
// Data object is already added to the database with 4 real(manually added) Items elements
var pre = _db.Data.Find(_id).Items.Count(); // Count's 4 with correct data
var el = _db.Data
.Include(q => q.Items)
.Where(x => x.Id == _id)
.FirstOrDefault();
var post = _db.Data.Find(_id).Items.Count(); // count's 8
然后发生这种情况: 我的列表中有8个元素,其中4个是“真实的,通过表单手动添加”,默认是4个,与此同时
var el = _db.Data.Include(q => q.Items).Where(x => x.Id == _id).FirstOrDefault();
它只有4个“真实的,手动添加的元素”
当我再次执行此代码时,它仍然停留在8个元素上-不会增加4。
另外,如果我的列表由于这些“默认”值而发生变化,那为什么CreationTime
没有变化?
通过以下方式初始化这些值没有什么区别
新列表(4){新项目(),新项目(),新项目(),新项目()};
或
Items.Add(new Item());在ctor中。