我有以下代码第一个实体:
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)。
有什么我还没有完成索引工作所需要的吗?
答案 0 :(得分:2)
所以我正在编写一个新类(由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; }
}
答案 1 :(得分:0)
我认为您的数据库已经创建,现在您正在尝试更改模型。我可以告诉你只是删除数据库并重新运行代码,但这意味着丢失所有数据。
你应该真正阅读EF Migrations,然后实施它。
但是,您仍然会遇到问题。因为名称上的新唯一性约束,无法升级现有数据。
更新1
在重新阅读您的问题时,&#34;有多行相同的用户名&#34;。您向我们展示了角色不用户的代码。您是否已将约束应用于用户?
更新2
如果您要放松数据,请在启动逻辑中执行context.Database.Initialize(true);
。