Тип сущности List`1 не является частью модели для текущего контекста - PullRequest
22 голосов
/ 27 марта 2012

Сначала я использовал базу данных, EF 4.1

Я получаю «Тип сущности List`1 не является частью модели для текущего контекста». ошибка при попытке обновить запись из моего представления редактирования.

Ошибка происходит на

db.Entry(properties).State = EntityState.Modified;

Вот моя модель:

public class Users
     {
     [Key]
     public int User_ID { get; set; }
     public string UserName { get; set; }

     [NotMapped]
     public IEnumerable<App_Properties> User_Properties
     {
          get { return Properties.Where(u => u.User_ID == User_ID); }
     }

     public virtual ICollection<App_Properties> Properties { get; set; }
}

public class App_Properties
{
     [Key]
     public int Prop_ID { get; set; }
     public int User_ID { get; set; }
     public int App_ID { get; set; }
     public string Key { get; set; }
     public string Value { get; set; }
     public DateTime DateEntered { get; set; }
     public DateTime DateModified { get; set; }

     [ForeignKey("User_ID")]
     public virtual Users Users { get; set; }
}

Вот мой контроллер:

[HttpPost]
public ActionResult Edit(ICollection<App_Properties> properties)
{
     if (ModelState.IsValid)
     {
          foreach (var item in properties)
          {
               db.Entry(properties).State = EntityState.Modified;
          }

          db.SaveChanges();

          return RedirectToAction("Index");
     }

     return View(properties);
}

Я подозреваю, что цикл foreach не подходит для установки EntityState для каждого элемента в ICollection.

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

57 голосов
/ 27 марта 2012

Попробуйте изменить свой цикл на:

foreach (var item in properties)
{
     db.Entry(item).State = EntityState.Modified;
}

Вы звонили db.Entry(properties), поэтому вы пытались присоединить всю коллекцию сразу.DbContext.Entry (object) ожидает один объект , а не коллекцию.

11 голосов
/ 29 мая 2013

Спасибо, снисходительность, за ответ. Работал отлично.

Для того, чтобы это стоило, я предпочитаю хранить мои EntityState.Modified назначения в одной строке (так как у меня есть кратные значения), поэтому использовал следующий LINQ:

properties.ForEach(p => db.Entry(p).State = EntityState.Modified);
0 голосов
/ 06 ноября 2018

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

foreach (var item in properties)
{
  var oldEntity = FGetById(item.Id); // You can use find instead of FGetById
  context.Entry(oldEntity).CurrentValues.SetValues(item);
  Update(oldEntity);
}
0 голосов
/ 17 мая 2018

Я оказался здесь, несмотря на использование кода EF. Для меня ответом на проблему было просто не пытаться передать список сущностей методу вставки, а вместо этого вставлять их по одному:

entityList.ForEach(context.Insert);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...