Как создать функцию обновления в LINQ, когда у объекта есть список? - PullRequest
0 голосов
/ 03 августа 2011

Мне все еще тяжело с Линком. Мне нужно написать функцию обновления Tat получает объект, который имеет список. На самом деле, у региона есть список городов. Я хочу передать объект "Регион", который имеет имя поля и список городов. Проблема в том, что городские объекты пришли из другого контекста, и я не могу прикрепить их к этому контексту. Я пробовал несколько функций, и всегда получаю сообщение об ошибке типа «EntitySet был изменен во время перечисления» или другой. Я стараюсь, чтобы приведенный ниже код работал, но если у кого-то другой подход, помогите.

    public int Updateregion(region E)
    {
        try
        {
            using (var ctx = new AppDataDataContext())
            {
                var R =
                       (from edt in ctx.regiaos
                        where edt.ID == E.ID
                        select edt).SingleOrDefault();              
                if (R != null)
                {
                    R.name = R.name;
                    R.description = E.description;
                }
                R.cities = null;
                R.cities.AddRange(Edited.Cities);
                ctx.SubmitChanges();
                return 0 //OK!
            }
        }
        catch (Exception  e)
        {
            ......
        }

1 Ответ

1 голос
/ 03 августа 2011

Вы не можете прикреплять объекты, извлеченные из одного текста данных, к другому, это не поддерживается Linq-to-SQL.Вам необходимо каким-то образом отделить объекты от их исходного контекста, но это также не поддерживается.Можно задаться вопросом, почему метод dettach недоступен, но, по крайней мере, вы можете подделать его, сопоставив список с новыми объектами:

var cities = Edited.Cities.Select(city => new City {
    ID = city.ID,
    Name = city.Name,
    /* etc */
});

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

...