C# .NET 4 EF4在SQL Server表中插入唯一标识符会提供重复项

C# .NET 4 EF4在SQL Server表中插入唯一标识符会提供重复项,c#,wcf,entity-framework-4,C#,Wcf,Entity Framework 4,您好,我有一个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 (

您好,我有一个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]
我在.NET4中有一个C WCF服务,它使用EF4插入表位置。这是执行此操作的代码

  //create country
                country = new Location()
                {
                    FullName = CountryName,
                    Type = "C",
                    Diaretics = CountryName,
                    Code = CountryCode
                };
                dbContext.AddToLocations(country);
                dbContext.SaveChanges();
但是,当我运行该服务时,代码在dbContext.SaveChanges处出错

违反主键约束“主键位置”。无法在对象“dbo.Location”中插入重复键。 声明已终止

我认为这是不可能发生的,因为在LocationUID字段上使用NewUID和主键的配置设置默认值


任何帮助都将不胜感激

我将假设它与L2S和EF1中的Guid身份问题类似,因为它根本无法正常工作。主要是在插入后必须重新选择标识的方式

EF无法使用SCOPE_标识从db获取GUID,它必须基于所有字段进行选择

L2S中的解决方案是在代码中创建GUID

我认为如果你检查数据库,它将试图插入一个空的GUID。既然已经存在一个空的,你就会得到这个异常

我不知道这是否在EF4中都发生了更改,请在GUID PK属性上将StoreGeneratedPattern设置为Identity

参考:


看起来它现在得到了支持,但阅读它似乎是一种黑客行为,而不是适当的支持。在我看来,在EF designer中将StoreGeneratedpattern更改为Identity并不能解决问题。因此,需要将Edmx文件编辑为XML文件,并在部分中进行更改,以解决问题