Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Помогите побороть "ConcurrencyException / 2 сообщений из 2, страница 1 из 1
29.09.2014, 20:14
    #38761240
Alonmaster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите побороть "ConcurrencyException
Прошу помощи! При сохранении данных в БД, происходит исключение:

"Исключение типа "System.Data.Entity.Infrastructure.DbUpdateConcurrencyException" возникло в EntityFramework.dll, но не было обработано в коде пользователя
Дополнительные сведения: Инструкции по обновлению, вставке или удалению из хранилища затронули непредвиденное число строк (0). Сущности могли быть изменены или удалены с момента их загрузки. Обновите записи диспетчера ObjectStateManager."

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 public void Update(AbonentViewModel abonent)
        {
            var entity = new Abonent();

            entity.AbonentID = abonent.HouseID;
            entity.FIO = abonent.FIO;
            entity.FlatNumber = abonent.FlatNumber;
            entity.Square = abonent.Square;
            entity.PhoneNumber = abonent.PhoneNumber;
            entity.HumansCount = abonent.HumansCount;
            entity.Deleted = abonent.Deleted;

            entity.StreetID = abonent.StreetID;


            if (abonent.Street != null)
            {
                entity.StreetID = abonent.StreetID;
            }

            entity.CityID = abonent.CityID;

            if (abonent.City != null)
            {
                entity.CityID = abonent.CityID;
            }

            entity.HouseID = abonent.HouseID;

            if (abonent.House != null)
            {
                entity.HouseID = abonent.HouseID;
            }

            abonent.AbonentID = entity.AbonentID;

            db.Abonents.Attach(entity);

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

           [color=red] db.SaveChanges();[/color]
         
         }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Update([DataSourceRequest] DataSourceRequest request,
            [Bind(Prefix = "models")] IEnumerable<AbonentViewModel> abonents)
        {
            IList<AbonentViewModel> abonentViewModels = abonents as IList<AbonentViewModel> ?? abonents.ToList();
            if (abonents != null && ModelState.IsValid)
            {
                foreach (AbonentViewModel abonent in abonentViewModels)
                {
                    abonentService.Update(abonent);
                }
            }



            return Json(abonentViewModels.ToDataSourceResult(request, ModelState));
        }



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
public class AbonentViewModel
    {
        //[ScaffoldColumn(false)]
        //[Key]
        public int AbonentID { get; set; }

        public string FIO { get; set; }

        public int FlatNumber { get; set; }

        public int Square { get; set; }

        public string PhoneNumber { get; set; }

        public int HumansCount { get; set; }

        public bool Deleted { get; set; }

        [UIHint("ClientStreetCascade")]
        public StreetViewModel Street { get; set; }
        public int StreetID { get; set; }
        public string StreetName { get; set; }
        [UIHint("ClientCityCascade")]
        public CityViewModel City { get; set; }
        public int CityID { get; set; }

        [UIHint("ClientHouseCascade")]
        public HouseViewModel House { get; set; }
        public int HouseID { get; set; }
        public string HouseFull { get; set; }
        public StreetTypeListViewModel StreetType { get; set; }
        public int? StreetTypeID { get; set; }
        public string StreetTypeName { get; set; }
    }



Красным выделено место, где происходит исключение. При создании и удалении записи из БД исключения не происходит!
...
Рейтинг: 0 / 0
30.09.2014, 19:17
    #38762560
refreg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите побороть "ConcurrencyException
Alonmaster,

http://msdn.microsoft.com/en-us/library/system.data.entity.dbset.attach(v=vs.113).aspx

Attach is used to repopulate a context with an entity that is known to already exist in the database.

https://www.google.ru/#newwindow=1&q=attach vs add entity framework

PS. В трех местах однотипная ошибка:
Код: c#
1.
2.
3.
4.
if (abonent.Street != null)
{
    entity.StreetID = abonent.StreetID;
}
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Помогите побороть "ConcurrencyException / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]