. net 4 EF4插入唯一标识符到SQL Server表给出重复

本文关键字:Server SQL EF4 插入 唯一 标识符 net | 更新日期: 2023-09-27 18:04:08

你好,我有一个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服务在。net 4使用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()和主键的配置。

如有任何帮助,不胜感激

. net 4 EF4插入唯一标识符到SQL Server表给出重复

在GUID PK属性中设置StoreGeneratedPatternIdentity

裁判:

  • 使用实体密钥

  • 技巧19 -如何在实体框架中使用乐观并发

  • 使用uniqueidentifier SQL列类型与实体框架

  • 实体框架4主键作为GUID和自动生成

我假设这与Guid在L2S和EF1中的身份问题类似,在这一点上,它根本不起作用。主要是在插入之后选择返回的标识符。

没有办法EF做SCOPE_IDENTITY()从数据库中获取GUID,它必须根据所有字段进行选择。

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

我认为如果你检查DB,它将试图插入一个空GUID。因为空的已经存在,所以你会得到那个异常。

(我不知道这是否在EF4中都改变了)