我的 SQL 理解相当基础,而且我来自 NHibernate 的世界,所以我对这个问题相当困惑......
我有两节课:
public class UserProfile
{
public UserProfile() { }
[Key]
public int UserId { get; set; }
public string UserName { get; set; }
public SerialNumber Serial { get; set; }
// Other properties
}
和
public class SerialNumber
{
public SerialNumber()
{
// My code that creates a unique Code
}
[Key]
public string Code { get; set; }
public UserProfile User { get; set; }
// Other Properties
}
我有这个
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Other modelBuilder stuff
modelBuilder.Entity<UserProfile>()
.HasOptional(s => s.Serial)
.WithRequired(u => u.User);
}
运行后,Add-Migration
我得到了这个:
public override void Up()
{
DropForeignKey("dbo.UserProfile", "Serial_Code", "dbo.SerialNumbers");
DropIndex("dbo.UserProfile", new[] { "Serial_Code" });
RenameColumn(table: "dbo.SerialNumbers", name: "Serial_Code", newName: "User_UserId");
AddForeignKey("dbo.SerialNumbers", "User_UserId", "dbo.UserProfile", "UserId");
CreateIndex("dbo.SerialNumbers", "User_UserId");
}
public override void Down()
{
// Inverse of above
}
运行后Update-Database
出现错误:
"Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong."
我可以通过生成的代码Add-Migration
判断出问题所在,因为我的 db 表甚至没有名为"Serial_Code"
我需要Code
成为我Key
的,因为 EntityFramework 没有选项可以强制将列设置为Unique
除了使其成为键。
我如何使它Serial
成为一个可选属性UserProfile
并User
在SerialNumber
添加到时自动设置UserProfile
?