powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ2SQL Insert and Constraint
7 сообщений из 7, страница 1 из 1
LINQ2SQL Insert and Constraint
    #36994702
Maxim_Ya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!

Есть 2 таблицы в базе:

Tickets и Prices

Задано отношение 1 ко многим.

Ticket.id -> Prices.TicketID


Таблица Ticket:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE [dbo].[Prices](
	[id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	[TicketID] [int] NOT NULL
        -- остальные поля
 CONSTRAINT [PK_Prices] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Prices]  WITH CHECK ADD  CONSTRAINT [FK_Prices_Tickets] FOREIGN KEY([TicketID])
REFERENCES [dbo].[Tickets] ([id])
GO

ALTER TABLE [dbo].[Prices] CHECK CONSTRAINT [FK_Prices_Tickets]
GO


Таблица Prices:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE [dbo].[Tickets](
	[id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
	-- остальные поля
 CONSTRAINT [PK_Tickets] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


При попытке вставить данные в таблицу

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ticket = new Ticket();
ticket.Field1 = ...;
.....
ticket.FieldN = ...;

context.Tickets.InsertOnSubmit(ticket);     


Price price = new Price();
price.Ticket = ticket;

price.fieldN = ....;

context.Prices.InsertOnSubmit(price);

context.SubmitChanges();

Возникает ошибка:

Код: plaintext
1.
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_Tickets'. Cannot insert duplicate key in object 'dbo.Tickets'.
The statement has been terminated.

Что-то не так с Ticket.id ?
...
Рейтинг: 0 / 0
LINQ2SQL Insert and Constraint
    #36994705
Maxim_Ya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С файлом dbml все в порядке, создавал с базы.
...
Рейтинг: 0 / 0
LINQ2SQL Insert and Constraint
    #36999220
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim_Ya,

посмотрите в профиллере на t-sql код LINQ'a, думаю тогда все станет ясно.
...
Рейтинг: 0 / 0
LINQ2SQL Insert and Constraint
    #37018493
Maxim_Ya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
declare @p0 uniqueidentifier
declare @p1 datetime
...
declare @p22 nvarchar( 38 )

set @p0='C858E109-C074-4FF4-85B3-F777E944F534'
set @p1='Nov  1 2010 12:57:09:690PM'
...
set @p22=N'XXX'

INSERT INTO [dbo].[Tickets]([OrderID], [Date], ....)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17, @p18, @p19, @p20, @p21, @p22)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]



Код: plaintext
1.
2.
3.
4.
Msg  2627 , Level  14 , State  1 , Line  49 
Violation of PRIMARY KEY constraint 'PK_Tickets'. Cannot insert duplicate key in object 'dbo.Tickets'.
The statement has been terminated.

( 1  row(s) affected)
...
Рейтинг: 0 / 0
LINQ2SQL Insert and Constraint
    #37018496
Maxim_Ya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел, вроде все нормально.
...
Рейтинг: 0 / 0
LINQ2SQL Insert and Constraint
    #37018588
Maxim_Ya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В дополнение к этому:

если изменить int id в таблице Tickets на uniqueidentifer . (и соотвественно подправить в Prices поле TicketId на uniqueidentifer )

При вставке генерить Guid TicketId самостоятельно, то теперь получаем другую ошибку.

Код: plaintext
1.
2.
.Net SqlClient Data Provider
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_Prices'. Cannot insert duplicate key in object 'dbo.Prices'.
The statement has been terminated.

поменять id в таблице Prices с int на uniqueidentifer ???


Дополнительная информация:
Если запустить генерацию на пустой базе, все работает замечательно.

Часто нужно убить данные за какой-то период и пересчитать заново вставит в те же таблицы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
using( .... )
{

var prices = from p in Context.Prices where (p.Ticket.Date >= DateFrom  && p.Ticket.Date < DateTo) select p;
Context.Prices.DeleteAllOnSubmit( prices );  
Context.SubmitChanges();

/* ...... */

var tickets = from t in Context.Tickets where (t.Date >= DateFrom && t.Date < DateTo) select t;
Context.Tickets.DeleteAllOnSubmit(tickets);
Context.SubmitChanges();

}


После этого начинают лезть эти ошибки.
Как будто ломается IDENTITY счетик.


Оптимальное решение поменять IDENTITY столбцы на Guid'ы ?
...
Рейтинг: 0 / 0
LINQ2SQL Insert and Constraint
    #37018596
Maxim_Ya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+ На эти таблицы нужно настроить репликацию на другой сервак.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ2SQL Insert and Constraint
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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