. 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()和主键的配置。
如有任何帮助,不胜感激
在GUID PK属性中设置StoreGeneratedPattern
为Identity
。
裁判:
-
使用实体密钥
-
技巧19 -如何在实体框架中使用乐观并发
-
使用uniqueidentifier SQL列类型与实体框架
-
实体框架4主键作为GUID和自动生成
我假设这与Guid在L2S和EF1中的身份问题类似,在这一点上,它根本不起作用。主要是在插入之后选择返回的标识符。
没有办法EF做SCOPE_IDENTITY()从数据库中获取GUID,它必须根据所有字段进行选择。
L2S中的解决方案是在代码中创建GUID。
我认为如果你检查DB,它将试图插入一个空GUID。因为空的已经存在,所以你会得到那个异常。
(我不知道这是否在EF4中都改变了)