C#EF Core如何仅初始化一次Model的列表?

时间:2018-08-31 22:10:01

标签: c# asp.net .net-core entity-framework-core

我想用一些默认商品填充商品列表

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中。

0 个答案:

没有答案