2

我有以下代码第一实体:

class Role
{
    [Key]
    public int Id { get; set; }
    [Index("NameIndex", IsUnique = true)]
    public string Name { get; set; }
}

但是在使用 SQL Management Studio 检查数据库时,有多个同名的行:

ID=1, Name=admin
ID=2, Name=admin

我的上下文很简单:

class MemberContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
}

检查 SQL 2014 Express 数据库表索引,没有生成(只有 PK 存在)。

有什么我没有做的事情需要索引才能工作吗?

4

2 回答 2

3

所以我正在编写一个新类(由 Autofac 从 DLL 注入),主程序正在运行 EF 6.0(而我的实用程序类项目使用的是 EF 6.1)。

具体来说,我必须对字符串长度进行长度约束,否则我将无法在其上放置索引(无法在 varchar(max) 上生成索引):

class Role
{
    [Key]
    public int Id { get; set; }

    [MaxLength(127)]
    [Index(IsUnique = true)]
    public string Name { get; set; }       

    public virtual ICollection<User> Users { get; set; }
}
于 2014-05-17T15:37:38.457 回答
0

我认为您的数据库已经创建,现在您正在尝试更改模型。我可以告诉你删除数据库并重新运行代码,但这意味着丢失所有数据。

您应该真正阅读有关EF 迁移的信息,然后实施它。

但是,您仍然会遇到问题。由于名称的新唯一性约束,您现有的数据无法升级。

更新 1

在重新阅读您的问题时,“有多行相同的用户名”。您向我们展示了 Role NOT Users 的代码。您是否已将约束应用于用户?

更新 2

如果您喜欢丢失数据,那么请context.Database.Initialize(true);按照您的启动逻辑进行操作。

于 2014-05-17T11:45:23.230 回答