使用实体框架向现有数据库添加新关系

时间:2018-03-01 20:06:44

标签: entity-framework ef-migrations

给定一个带有表A的数据库。我想创建一个表B,并在A和B之间添加一个与所需外键的一对一关系。 例如,假设有一个现有的表'Users',然后我们想要向现有用户添加'Roles'。 这些实体的代码第一个定义如下:

    public class User
    {
        public Id UserId { get; set; }
        public string Email { get; set; }
        public string UserName => Email;
        public Roles Role { get; set; }
        public int? RoleId { get; set; }
    }
    public class Roles
    {
        public string RoleName { get; set; }
        public int RoleId { get; set; };
        public ICollection<User> GetUsers { get; set; }
    }

使用Fluent API的用户的配置方法如下:

    public void Configure(EntityTypeBuilder<User> builder)
    {
            builder.ToTable("User");                
            builder.HasKey(t => t.UserId );
            builder.Property(t => t.UserId ).ValueGeneratedOnAdd();

        builder.HasOne(dt => dt.Role)
            .WithMany(d => d.GetUsers)
            .HasForeignKey(dt => dt.RoleId)
            .HasConstraintName("ForeignKey_UserRole")
            .OnDelete(DeleteBehavior.Restrict)
            .IsRequired();
    }

尝试运行迁移我收到此错误消息:

'ALTER TABLE语句与FOREIGN KEY约束'

冲突

通过在两次迁移中拆分此迁移并在它们之间播种数据,我可以构建新数据库:

  • 第一个删除用户实体的Fluent APi定义上的约束IsRequired,并允许外键RoleId的空值。
  • 然后播种数据库
  • 添加第二次和最后一次迁移,以在User实体中启用所需外键RoleID的约束,并删除外键上的allow null。

我的问题与是否存在允许使用代码优先方法添加新关系以及仅使用一次迁移的所需外键的策略有关?

谢谢

旧金山

0 个答案:

没有答案