实体框架代码第一个唯一列

2023-11-22

我正在使用 Entity Framework 4.3 并使用 Code Fist。

我有课

public class User
{
   public int UserId{get;set;}
   public string UserName{get;set;}
}

如何告诉实体框架创建数据库表时用户名必须是唯一的? 如果可能的话,我更愿意使用数据注释而不是配置文件。


在 Entity Framework 6.1+ 中,您可以在模型上使用此属性:

[Index(IsUnique=true)]

你可以在这个命名空间中找到它:

using System.ComponentModel.DataAnnotations.Schema;

如果您的模型字段是字符串,请确保在 SQL Server 中未将其设置为 nvarchar(MAX),否则您将在 Entity Framework Code First 中看到以下错误:

表“dbo.y”中的列“x”的类型无法用作索引中的键列。

原因是因为这样:

SQL Server 保留所有索引键列的最大总大小 900 字节的限制。”

(from: http://msdn.microsoft.com/en-us/library/ms191241.aspx )

您可以通过在模型上设置最大字符串长度来解决此问题:

[StringLength(450)]

您的模型现在在 EF CF 6.1+ 中将如下所示:

public class User
{
   public int UserId{get;set;}
   [StringLength(450)]
   [Index(IsUnique=true)]
   public string UserName{get;set;}
}

Update:

如果你使用 Fluent:

  public class UserMap : EntityTypeConfiguration<User>
  {
    public UserMap()
    {
      // ....
      Property(x => x.Name).IsRequired().HasMaxLength(450).HasColumnAnnotation("Index", new IndexAnnotation(new[] { new IndexAttribute("Index") { IsUnique = true } }));
    }
  }

并在您的模型构建器中使用:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  // ...
  modelBuilder.Configurations.Add(new UserMap());
  // ...
}

Update 2

对于 EntityFrameworkCore 另请参阅此主题:https://github.com/aspnet/EntityFrameworkCore/issues/1698

Update 3

对于 EF6.2,请参阅:https://github.com/aspnet/EntityFramework6/issues/274

Update 4

带有 EF Core 的 ASP.NET Core Mvc 2.2:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Unique { get; set; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架代码第一个唯一列 的相关文章

随机推荐

  • vscode 语言客户端扩展 - 如何从服务器向客户端发送消息?

    我一直在开发一个 vscode 扩展 它由使用语言服务器协议的客户端和服务器组成 目前 我正在尝试做以下事情 当服务器检测到某种条件时 他请求客户端将一定数量的文件加载到工作区中 我在做这件事时遇到了严重的问题 由于语言服务器协议没有执行此
  • 将稀疏数组中的元素与矩阵中的行相乘

    如果你有一个稀疏矩阵 X gt gt X csr matrix 0 2 0 2 0 2 0 1 gt gt print type X gt gt print X todense
  • 如何使用 java 13 设置 spring-boot 应用程序

    我正在创建一个 spring boot 应用程序 它在 openJdk12 上运行且性能良好 应用程序 https github com jactor rises jactor persistence 我正在寻找如何使用 openJdk13
  • Java MimetypesFileTypeMap 在 Android 模拟器上始终返回 application/octet-stream

    我正在尝试确定 Android 设备 实际上是我与模拟器一起使用的虚拟设备 上存储的文件的 Mime 媒体类型 我找到了这个资源从文件中获取 MIME 类型其中推荐了javax activation MimetypesFileTypeMap
  • 更新到构建工具 2.3.0 后,LibraryPlugin 中没有 sdkHandler 字段

    我正在使用此方法来获取 NDK 目录 project plugins findPlugin com android library sdkHandler getNdkFolder 更新后com android tools build gra
  • 在 iframe 中包含 jQuery 时,Internet Explorer 9(不是早期版本或其他浏览器)中出现错误

    基本上我有一个页面启动了 fancybox iframe 在该 iframe 中我还包含 jQuery 但是当我在 Internet Explorer 9 中测试它时 它给了我错误 行 68 n 错误 对象 未定义 该错误在文件中jquer
  • Python 和 Matlab 中的克罗内克积

    我试图从 MATLAB 中用 Python 重现结果 但是 我似乎无法正确理解 这是正确的 MATLAB 代码 nx 5 ny 7 x linspace 0 1 nx dx x 2 x 1 y linspace 0 1 ny dy y 2
  • Python:在 Windows 上启动新的命令提示符并等待其完成/退出

    我不明白为什么在 Windows 上做到这一点这么难 我想生成一堆命令提示符窗口来运行其他脚本 我想要这个的原因是这样我可以整齐地看到每个脚本的所有输出 如果我将它们只是主窗口中的线程 子进程 我无法正确查看所有输出 我也不想记录输出 因为
  • C# 拖放在 Windows 7 上不起作用

    我有一个使用 C winforms 的项目已经有一段时间了 我在windows 7发布之前就实现了拖放功能 工作起来就像一个魅力 但是 当使用 Windows 7 时 它不起作用 该事件甚至没有被触发 AllowDrop设置为 true 订
  • 无法在 Kafka Stream 应用程序的 IDE 中删除状态目录

    我正在开发一个简单的 Kafka Stream 应用程序 它从一个主题中提取消息并在转换后将其放入另一个主题中 我正在使用 Intelij 进行开发 当我调试 运行这个应用程序时 如果我的 IDE 和 Kafka 服务器位于同一台机器 即
  • 使用 JavaScript 自定义确认对话框

    我想创建一个类似于的 JavaScript 函数confirm 显示一个对话框 一个带有问题和 2 个按钮的 div 并返回true如果用户单击 确定 或false否则 是否可以使用 JavaScript jQuery 做到这一点 但是wi
  • 对绑定在一起的 NSTextField 使用 KVO

    我在使用 KVO 处理 Cocoa 应用程序中绑定在一起的文本字段时遇到问题 当使用按钮在 NSTextFields 中设置字符串时 我已经得到了这个工作 但它不适用于绑定 一如既往 我们将非常感谢 Stack Overflow 提供的任何
  • 以编程方式忽略 Cout

    有谁知道是否有一个技巧可以切换所有cout lt lt 函数不打印可见输出 我正在尝试将我和其他人编写的一些代码组合在一起以制作一个演示 我不想将输出重定向到文件 并且想要一个在 Windows 和 Linux 之间具有一定兼容性的解决方案
  • Node.js / Express 应用程序中的测试环境

    我刚刚开始使用 Node 并且一直在关注各种教程 我创建了一个 Express 应用程序 并设置了 Mongoose 和 Jasmine 我如何配置我的规格 以便我可以 创建模型 在每个规格后自动清理它们 使用不同的数据库来创建测试对象 例
  • Python 来自 Python:限制功能? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 安全 沙箱 我正在用 Python 构建一个企业 Web 系统 该系统允许上传脚本并在服务器端运行 鉴于我已经在使用 Python 进行开发 而且它是一种非常简单的语言 它似乎是一种编写
  • 如何在 Ruby on Rails 中使用映射表跟踪模型历史记录?

    dream 我想记录用户何时更改地址 这样 当下订单时 它将始终能够引用下订单时使用的用户地址 可能的图式 users id username email user addresses id label line 1 line 2 city
  • Agda 的 Haskell 推导机制

    我想知道 Agda 中是否有任何类似于 Haskell 的东西deriving Eq条款 那么我下面还有一个相关的问题 例如 假设我有一种玩具语言的类型 data Type Set where Nat Type Prp Type 然后我可以
  • 有没有办法覆盖 LINQtoSQL 生成的类中的空构造函数?

    如果我的数据库中有一个名为 Users 的表 则 LINQtoSQL 会生成一个名为 User 的类 该类具有已声明的空构造函数 如果我想重写此构造函数并向其中添加我自己的逻辑 最佳实践是什么 由 O R 设计器生成的默认构造函数调用一个名
  • 更新多行时强制转换 NULL 类型

    当我尝试同时更新多行时遇到问题 这是我使用的表和查询 为了更好的阅读而进行了简化 table CREATE TABLE foo pkid integer x integer y integer query UPDATE foo SET x
  • 实体框架代码第一个唯一列

    我正在使用 Entity Framework 4 3 并使用 Code Fist 我有课 public class User public int UserId get set public string UserName get set