Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление связанных объектов, LINQ to SQL 
V
    Опции темы
PashaPash
Дата 27.3.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Red Wind
Какой sql server? 
Какая студия? 
DataContext создаешь новый как в примерах, или спускаешь сверху? Если спускаешь, то зачем?
Если спускаешь, то не факт что customer.Orders лежит актуальная инфа.
Уверен что в спущенном сверху контексте нет order-ов в pending insert для этого кастомера?
Падает именно с ошибкой на FK_Orders_Customers?
Цитата(Red Wind @  27.3.2009,  12:33 Найти цитируемый пост)
Кстати в чём фишка удаления Order_Details? Для Order'а который я удаляю нет Order_Details. 

В стандартной базе nw, от 2000-го сервера, таких order-ов нет.



--------------------
PM MAIL WWW   Вверх
Red Wind
Дата 27.3.2009, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



В общем, нашёл причину ошибки. Есть если удалять только что сохранённый объект, то всё ок. А если сначала сохранить кастомера и заказ, потом вычитать кастомера и уже потом удалять, то падает ошибка. Встаёт вопрос, почему так выходит?

Работоспособный код:
Код

        static void Listing14_3()
        {
            Console.WriteLine("{0} : Begin", new StackTrace(0, true).GetFrame(0).GetMethod().Name);

            Customer cust =
              new Customer
              {
                  CustomerID = "LAWN",
                  CompanyName = "Lawn Wranglers",
                  ContactName = "Mr. Abe Henry",
                  ContactTitle = "Owner",
                  Address = "1017 Maple Leaf Way",
                  City = "Ft. Worth",
                  Region = "TX",
                  PostalCode = "76104",
                  Country = "USA",
                  Phone = "(800) MOW-LAWN",
                  Fax = "(800) MOW-LAWO",
                  Orders = {
            new Order {
              CustomerID = "LAWN",
              EmployeeID = 4,
              OrderDate = DateTime.Now,
              RequiredDate = DateTime.Now.AddDays(7),
              ShipVia = 3,
              Freight = new Decimal(24.66),
              ShipName = "Lawn Wranglers",
              ShipAddress = "1017 Maple Leaf Way",
              ShipCity = "Ft. Worth",
              ShipRegion = "TX",
              ShipPostalCode = "76104",
              ShipCountry = "USA"
            }
          }
              };

            northwind.Customers.InsertOnSubmit(cust);
            northwind.SubmitChanges();

            //Customer customer = northwind.Customers.Where(c => c.CustomerID == "LAWN").First();

            northwind.Orders.DeleteOnSubmit(cust.Orders.First());
            northwind.Customers.DeleteOnSubmit(cust);
            northwind.SubmitChanges();

            Console.WriteLine("{0} : End", new StackTrace(0, true).GetFrame(0).GetMethod().Name);
        }


Не рабочий код:
Код

        static void Listing14_3()
        {
            Console.WriteLine("{0} : Begin", new StackTrace(0, true).GetFrame(0).GetMethod().Name);

            Customer cust =
              new Customer
              {
                  CustomerID = "LAWN",
                  CompanyName = "Lawn Wranglers",
                  ContactName = "Mr. Abe Henry",
                  ContactTitle = "Owner",
                  Address = "1017 Maple Leaf Way",
                  City = "Ft. Worth",
                  Region = "TX",
                  PostalCode = "76104",
                  Country = "USA",
                  Phone = "(800) MOW-LAWN",
                  Fax = "(800) MOW-LAWO",
                  Orders = {
            new Order {
              CustomerID = "LAWN",
              EmployeeID = 4,
              OrderDate = DateTime.Now,
              RequiredDate = DateTime.Now.AddDays(7),
              ShipVia = 3,
              Freight = new Decimal(24.66),
              ShipName = "Lawn Wranglers",
              ShipAddress = "1017 Maple Leaf Way",
              ShipCity = "Ft. Worth",
              ShipRegion = "TX",
              ShipPostalCode = "76104",
              ShipCountry = "USA"
            }
          }
              };

            northwind.Customers.InsertOnSubmit(cust);
            northwind.SubmitChanges();

            Customer customer = northwind.Customers.Where(c => c.CustomerID == "LAWN").First();

            northwind.Orders.DeleteOnSubmit(customer.Orders.First());
            northwind.Customers.DeleteOnSubmit(customer);
            northwind.SubmitChanges();

            Console.WriteLine("{0} : End", new StackTrace(0, true).GetFrame(0).GetMethod().Name);
        }


P.S.
БД подкачал отсюда:
http://linqdev.com/PublicPortal/LinkClick....53&mid=1191
This is the extended version of the Northwind database that was initially distributed with the May 2006 LINQ CTP. It contains additional things such as a Contacts table, as well as table-valued and scalar-valued functions to demonstrate additional LINQ to SQL functionality.
Юзаю SQL Server 2005 SP3, VS2008 SP1. DataContext создаю свежий.

Это сообщение отредактировал(а) Red Wind - 27.3.2009, 20:18
PM MAIL ICQ   Вверх
PashaPash
Дата 27.3.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 4
Всего: 49



Red Wind, хочешь покажу фокус? поменяй в "нерабочем" коде LAWN на LAWN1.


--------------------
PM MAIL WWW   Вверх
Red Wind
Дата 27.3.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Походу пятисимвольные ID работают. Поле CustomerID типа nchar(5). Но какая разница?
PM MAIL ICQ   Вверх
Idsa
Дата 27.3.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 5
Всего: 62



Цитата(Red Wind @  28.3.2009,  00:55 Найти цитируемый пост)
Но какая разница? 

"LAWN" при сохранении запишется как "LAWN ".


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Red Wind
Дата 27.3.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Блин, это же не nvarchar))) Даже стыдно smile 

Это сообщение отредактировал(а) Red Wind - 27.3.2009, 22:32
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.1034 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.