首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为实体框架数据库的varchar列创建唯一键?

如何为实体框架数据库的varchar列创建唯一键?
EN

Stack Overflow用户
提问于 2013-12-24 07:39:11
回答 1查看 10.3K关注 0票数 5

我看了youtube上的视频教程,教你如何创建独特的密钥

http://www.youtube.com/watch?v=oqrsfatxTYE&list=PL08903FB7ACA1C2FB&index=9

在视频中,他为电子邮件(Nvarchar)列创建了一个唯一键,我可以在手动创建数据库时创建它,但当我尝试首先使用实体框架代码为使用实体框架代码创建的数据库创建唯一键时,使用下一个查询

代码语言:javascript
复制
ALTER  TABLE Peoples
   ADD CONSTRAINT UQ_MyTable_Email UNIQUE (email)

它将生成一个错误:

代码语言:javascript
复制
Msg 1919, Level 16, State 1, Line 2
Column 'email' in table 'Peoples' is of a type that is invalid for use as a key column in an index.

问题出在哪里?如何为nvarchar(max)列创建唯一键?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-24 07:52:38

假设您创建了这个表

代码语言:javascript
复制
CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(1000)
CONSTRAINT uc_Email UNIQUE (Email)
)
GO

您将收到一条警告:

警告!密钥最大长度为900字节。索引'uc_Email‘的最大长度为1000字节。对于大值的某些组合,插入/更新操作将失败

要在其上定义唯一约束的列应小于或等于900字节,因此,如果希望能够在该列上创建唯一约束,则可以使用VARCHAR(900)NVARCHAR(450)

在没有任何警告的情况下创建了与VARCHAR(450)相同的表

代码语言:javascript
复制
CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(900)
CONSTRAINT uc_Email UNIQUE (Email)
)
GO

结果

命令已成功完成。

表的测试

假设这是你的桌子

代码语言:javascript
复制
CREATE TABLE ConstTable 
(ID INT, 
Email VARCHAR(MAX)
)
GO

现在,尝试在VARCHAR(MAX)数据类型上创建任何索引,都会得到相同的错误。

代码语言:javascript
复制
CREATE INDEX ix_SomeIdex
ON ConstTable (Email)

错误消息

表'ConstTable‘中的电子邮件消息1919,级别16,状态1,第1行列’

‘的类型无效,不能用作索引中的键列。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20752849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档