Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ attach / 9 сообщений из 9, страница 1 из 1
06.08.2009, 13:52
    #36129965
umluser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
Есть несколько взаимосвязанных таблиц, давайте назовём их
products, vendors, categories
соответственно products ссылается на vendors и categories

При добавлении какого-то продукта я делаю так:
dc.Products.InsertOnSubmit(newProduct);
Соответственно автоматом заполняются таблицы для vendors и categories.

Допустим я хочу изменить какой-то продукт.
Предположим, что он не ссылался ни на одну категорию.
При
Код: plaintext
1.
dc.Products.Attach(modifiedProduct);
dc.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, modifiedProduct);
изменяется только таблица с продуктами.

Как сделать так, чтобы автоматически изменялись и другие таблицы, как это происходит при InsertOnSubmit()
...
Рейтинг: 0 / 0
10.08.2009, 17:28
    #36135620
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
непонятен вопрос, связки Attach/Refresh и InsertOnSubmit делают совершенно разные вещи. Причем тут связанные таблицы?
...
Рейтинг: 0 / 0
11.08.2009, 14:32
    #36137200
umluser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
зы,

каким образом через LINQ тогда можно проапдейтить данные?
Сейчас это происходит путём удаления всех записей из таблиц, после чего
вызывается .InsertOnSubmit() который автоматом заполняет все таблицы.
...
Рейтинг: 0 / 0
11.08.2009, 15:24
    #36137378
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
данные откуда берутся? Если аттачишь сущность с заданным айди то она автоматом будет сохранена в базу при сабмите

общий алгоритм такой:
Код: plaintext
1.
2.
3.
             if (entity.IsNew)
                    table.InsertOnSubmit(entity);
                else
                    table.Attach(entity, true);
...
Рейтинг: 0 / 0
11.08.2009, 16:08
    #36137515
umluser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
зы общий алгоритм такой:
Код: plaintext
1.
2.
3.
             if (entity.IsNew)
                    table.InsertOnSubmit(entity);
                else
                    table.Attach(entity, true);


т.е. при table.Attach(entity, true) LINQ2SQL должен по идее и проапдейтить и связанные таблицы?
у меня возникает ошибка "An entity can only be attached as modified without original state if it declares a version member or does not have an update check policy."
при добавлении колонки Timestamp в таблицу у меня возникает исключение "Row not found or changed"
...
Рейтинг: 0 / 0
11.08.2009, 17:09
    #36137716
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
откуда берется новая сущность, как создается?
...
Рейтинг: 0 / 0
12.08.2009, 15:38
    #36139730
XLinq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
umluser,

http://msdn.microsoft.com/ru-ru/library/bb896271.aspxЕсли присоединяемый объект связан с другими объектами, необходимо явно определить эти связи одним из следующих способов:
* Присоединить оба объекта к контексту объекта и затем вызвать метод Attach для объекта EntityCollection или EntityReference с тем, чтобы определить эту связь.
* Если же ни один из объектов не присоединяется, нужно вызвать метод Add для EntityCollection и указать связанный объект или задать свойство Value объекта EntityReference связанному объекту. Далее нужно присоединить корневой узел графа объектов к контексту объекта. Этот метод можно использовать для создания графа объектов из отсоединенных объектов с последующим присоединением этого графа к контексту объекта.
...
Рейтинг: 0 / 0
12.08.2009, 15:44
    #36139756
XLinq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
...
Рейтинг: 0 / 0
24.08.2009, 01:17
    #36159092
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQ attach
umluser,

Most of these problems occur when you are not following the main purpose of Attach, which is to connect entities that are already attached to the ObjectContext and are not new.

You cannot use Attach to attach another EntityCollection; however, it is possible to attach an IEnumerable (discussed shortly). Otherwise, you need to attach one entity at a time.

You cannot use Attach when the EntityState of either end is Detached. ObjectContext is required to work out the relationship. Do an ObjectContext.Attach first.

You cannot use Attach when the ends are in different contexts.

You cannot use Attach to attach entities whose EntityState is Added. You'll want to use Add in this case.

You cannot use Attach to attach entities whose EntityState is Deleted. It's not possible to create a RelationshipEntry for a deleted entity.

You cannot use Attach to reassign entities to another graph.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ attach / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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