Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EF 6中的字符串类型字段上创建唯一约束?_C#_Asp.net Mvc_Entity Framework_Entity Framework 6_Ef Database First - Fatal编程技术网

C# 如何在EF 6中的字符串类型字段上创建唯一约束?

C# 如何在EF 6中的字符串类型字段上创建唯一约束?,c#,asp.net-mvc,entity-framework,entity-framework-6,ef-database-first,C#,Asp.net Mvc,Entity Framework,Entity Framework 6,Ef Database First,首先,我是MVC新手 我有一个项目表,其中包含ProjectID、ProjectNumber和ProjectDescription字段。ProjectId是int类型的entityKey,ProjectNumber需要是唯一的约束 如何在实体框架6.1.3中实现这一点 在我的专题课上,我有 public int ProjectID { get; set; } [Index(IsUnique = true)] [StringLength(200)]

首先,我是MVC新手

我有一个项目表,其中包含ProjectID、ProjectNumber和ProjectDescription字段。ProjectId是int类型的entityKey,ProjectNumber需要是唯一的约束

如何在实体框架6.1.3中实现这一点

在我的专题课上,我有

        public int ProjectID { get; set; }
        [Index(IsUnique = true)]
        [StringLength(200)]
        public string ProjectNumber { get; set; }
        public string ProjectDescription { get; set; }
从模型生成数据库时,该字段在数据库中未设置为唯一

我做错了什么?

根据中的答案

请尝试以下代码:

public int ProjectID { get; set; }
[Index("ProjectNumber_Index", IsUnique = true)]
[MaxLength(200)]
public string ProjectNumber { get; set; }
public string ProjectDescription { get; set; }

并确保SQL Server中的字符串未设置为nvarchar(MAX),否则您将首先看到实体框架代码的错误。

为了确保,您有一个对此命名空间的引用:使用System.ComponentModel.DataAnnotations.Schema对吗?另外,尝试添加maxlength属性,看看它是否有区别:
[maxlength(200)]
是的,我有对名称空间System.ComponentModel.DataAnnotations.Schema的引用。我对
[Index(IsUnique=true)][MaxLength(200)]公共字符串项目编号{get;set;}
进行了更改后,我保存了该类,然后我是否转到模型设计器并从模型生成数据库?是的,尝试
[MaxLength(200)]
而不是
[StringLength(200)]
,或者如果这不起作用,试着两种方法。在添加唯一约束之前,服务器需要知道字符数有一个限制。我想可能是我误解了什么。通过添加此“[MaxLength(200)][Index(IsUnique=true)]”,创建数据库表的生成脚本是否应该具有add constraint子句?如果您是从模型生成数据库,则它是自动的。如果您正确设置了模型,就不需要担心脚本及其约束。有关StringLength和MaxLength之间差异的更多参考信息:它不适用于我。所有字段均为nvarchar(50)。entitykey是一个int。我不确定我遗漏了什么或者我到底做错了什么。当我插入一个项目编号已存在的记录时,会发生什么情况?它会给您一个DbUpdateException,并显示以下消息:
无法在具有唯一索引“index”的对象“db.Project”中插入重复的键行。重复的键值为(…)。声明已终止。
如果我的回答对您仍然没有帮助,恐怕您必须等待比我更有经验的人来回答。对此我深表歉意。@user3726459模型更改后是否创建了数据库(或数据迁移)?@Sampath当我通过转到projectmodel.edmx创建数据库时,在实体旁边的空白处单击鼠标右键,然后选择“从模型生成数据库”。脚本生成后,我运行它。数据库已创建。在我运行数据库脚本并构建解决方案之后,ProjectModel.tt下的project.cs会被覆盖,一旦被覆盖,我添加的代码
[Index(“ProjectNumber\u Index”,IsUnique=true)][MaxLength(200)]
就会消失。