如果这已经在某个地方得到了回答,请提前抱歉,但我四处搜索却找不到答案。
我正在尝试链接 UserProfile 和 Reviewer 表。Reviewer 是应用程序中的一类用户,因此两个表之间的关系是一(UserProfile)到零/一(Reviewer)。
UserProfile 模型是:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public virtual Reviewer Reviewer { get; set; }
}
审稿人等级:
public class Reviewer
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
[ForeignKey("UserProfile")]
public int ReviewerID { get; set; }
public string Email { get; set; }
// other properties of Reviewer...
public virtual UserProfile UserProfile { get; set; }
}
换句话说,我试图将外键 UserId 设置为表 Reviewer 的键,名称为 ReviewerID。
我将 fluent API 指定如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
// other fluent API...
modelBuilder.Entity<UserProfile>()
.HasOptional(x => x.Reviewer).WithRequired(x => x.UserProfile);
}
但是,Code First 生成的数据库并不是我想要的。
假设我在 UserProfile 表中有以下条目:UserId = 4, UserName = lostman1
我尝试手动向 Reviewer 表中插入一条新记录:ReviewerID = 4, Email = d@d.com
事实证明,我无法更新数据库中的 ReviewerID 字段,因为它是一个自动递增的字段。此外,我收到以下错误:
第 4 行中的数据未提交。
错误来源:SQL Server Compact ADO.NET 数据提供程序。
错误消息:无法插入外键值,因为相应的主键 > 值不存在。[外键约束名 = FK_dbo.Reviewer_dbo.UserProfile_ReviewerID]
我的代码第一次设置有什么问题?非常感谢!