我使用以下要添加到数据库的上下文进行了基于代码的迁移:
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表定义键。我不需要这张桌子上的钥匙。我该如何解决这个问题?
答案 0 :(得分:0)
在您的课程中,它是对SignalRCOnnection对象集合的引用。数据库没有集合字段的概念。 SignalRConnection表应该得到指向SignalRUser的FK。不确定EF如何自动将字符串作为主键处理。但按照惯例,您的模型设计假设“子”表将具有到SignalRUser的FK,并且代码首先将为您创建该字段并在查询时使用它。更新。 您不必在SignalRUser类中包含FK。 EF应该能够在数据库模式中推断它。