C # EF Core, как инициализировать список для модели только один раз? - PullRequest
0 голосов
/ 01 сентября 2018

Я бы хотел заполнить список предметов некоторыми пунктами по умолчанию

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 ()); в кр.

...