迁移省略了一个领域

时间:2014-03-11 14:00:40

标签: sql-server entity-framework

我使用以下要添加到数据库的上下文进行了基于代码的迁移:

 public class SignalRUserContext : DbContext
    {
        public SignalRUserContext()
            : base("DefaultConnection")
        {
        }

        public DbSet<SignalRUser> Users { get; set; }
        public DbSet<SignalRConnection> Connections { get; set; }
    }

    public class SignalRUser
    {
        [Key]
        public string UserName { get; set; }
        public ICollection<SignalRConnection> Connections { get; set; }
    }

    public class SignalRConnection
    {
        [Key]
        public string ConnectionID { get; set; }
        public string UserAgent { get; set; }
        public bool Connected { get; set; }
    }
然后我做了:

enable-migrations -ContextTypeName AlphaFrontEndSiteASP.Models.SignalRUserContext -MigrationsDirectory:SignalRMigrations -Force

Update-Database -configuration AlphaFrontEndSiteASP.SignalRMigrations.Configuration -Verbose

其中

 public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            ContextKey = "AlphaFrontEndSiteASP.Models.SignalRUserContext";
            MigrationsDirectory = @"SignalRMigrations";
        }

它创建了SignalRUser和SignalRConnection表,但是在SignalRUser上它没有继续使用Connections列。它离开了它。如果我省略了连接上的[Key],它会给我一个错误,即没有为Connections表定义键。我不需要这张桌子上的钥匙。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在您的课程中,它是对SignalRCOnnection对象集合的引用。数据库没有集合字段的概念。 SignalRConnection表应该得到指向SignalRUser的FK。不确定EF如何自动将字符串作为主键处理。但按照惯例,您的模型设计假设“子”表将具有到SignalRUser的FK,并且代码首先将为您创建该字段并在查询时使用它。更新。 您不必在SignalRUser类中包含FK。 EF应该能够在数据库模式中推断它。