.NET 4 EF4 insertint Уникальный идентификатор в таблицу SQL Server дает дубликаты - PullRequest
2 голосов
/ 31 июля 2011

Привет У меня есть таблица SQL Server, как показано ниже

CREATE TABLE [dbo].[Location](
    [LocationUID] [uniqueidentifier] NOT NULL,
    [Code] [char](10) NULL,
    [Type] [char](1) NOT NULL,
    [FullName] [nvarchar](150) NULL,
 CONSTRAINT [PK_Location] PRIMARY KEY CLUSTERED 
(
    [LocationUID] ASC
)
ALTER TABLE [dbo].[Location] ADD  CONSTRAINT [DF_Location_LocationUID]  DEFAULT (newid()) FOR [LocationUID]

У меня есть служба C # WCF в .NET4, использующая EF4 для вставки в расположение таблицы.Это код, который делает это

  //create country
                country = new Location()
                {
                    FullName = CountryName,
                    Type = "C",
                    Diaretics = CountryName,
                    Code = CountryCode
                };
                dbContext.AddToLocations(country);
                dbContext.SaveChanges();

Но когда я запускаю службу, код падает на dbContext.SaveChanges () с ошибкой

Нарушение ограничения PRIMARY KEY 'PK_Location'.Невозможно вставить дубликат ключа в объект 'dbo.Location'.Оператор был прерван.

Я думал, что это невозможно, если установить значение по умолчанию в поле LocationUID с помощью NewUID () и настроить первичный ключ.

Любая помощьцениться

Ответы [ 2 ]

0 голосов
/ 31 июля 2011

Я собираюсь предположить, что это похоже на проблемы с Guid как идентичностями в L2S и EF1, в том, что это просто не работает вообще. Главным образом в том, как он должен выбрать личность обратно после вставки.

EF не может сделать SCOPE_IDENTITY (), чтобы получить GUID обратно из БД, его нужно выбирать на основе всех полей.

Решением в L2S было создание GUID в коде.

Я думаю, что если вы проверите БД, она будет пытаться вставить пустой GUID. И так как пустой уже существует, вы получаете это исключение.

(я не знаю, все ли изменилось в EF4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...