【发布时间】:2013-08-14 06:17:22
【问题描述】:
如果这个问题已经在某处得到解答,请提前抱歉,但我四处搜索并找不到答案。
我正在尝试链接 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,电子邮件 = d@d.com
事实证明,我无法更新数据库中的 ReviewerID 字段,因为它是一个自动递增的字段。此外,我收到以下错误:
第 4 行的数据未提交。
错误来源:SQL Server Compact ADO.NET 数据提供程序。
错误消息:无法插入外键值,因为相应的主键 > 值不存在。 [外键约束名=FK_dbo.Reviewer_dbo.UserProfile_ReviewerID]
我的代码首次设置有什么问题?非常感谢!
【问题讨论】:
-
用你的流利的方式尝试这样的事情,并在你的用户配置文件中添加一个外键
int? ReviewerId。HasOptional(t => t.Organization) .WithMany(t => t.Configurations) .HasForeignKey(d => d.OrganizationID); -
对不起,我是 asp.net MVC 的新手。我尝试:modelBuilder.Entity
().HasOptional(x => x.Reviewer).WithRequired(x => x.UserProfile).HasForeignKey(d => d.UserId);但它返回编译错误。你能帮我写下我需要输入的确切流畅的 API 语句,或者指出我正确的方向吗?谢谢。
标签: c# asp.net-mvc entity-framework ef-code-first