";序列不包含任何元素“-可选外键
本文关键字:元素 quot 何元素 包含任 | 更新日期: 2023-09-27 18:27:23
我刚刚手动将外键ID添加到实体中。
我的UserProfile实体曾经具有以下属性:
public virtual UserProfile Referer { get; set; }
因此,现在我的UserProfile实体具有以下属性:
[ForeignKey("Referer")]
public int? RefererId { get; set; }
public virtual UserProfile Referer { get; set; }
然而,当我更新数据库时,我得到了以下错误:
序列不包含任何元素
Referer UserProfile应该是可选的,这就是我标记int的原因?。
这里有什么问题?
编辑UserProfile ID字段如下所示:
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
我认为您滥用了ForeignKey
属性。它应该应用于您的虚拟属性,以定义包含RefererId
的数据库字段
所以在你的情况下,它应该是这样的:
public int? RefererId { get; set; }
[ForeignKey("RefererId")]
public virtual UserProfile Referer { get; set; }
更新:
我想这应该是一对多的关系。因此,您必须更新您的类以具有相应的结构。我已经创建了具有几乎相同结构的示例解决方案:
public class Person
{
[Key]
public int Id { get; set; }
public int PersonId { get; set; }
[ForeignKey("PersonId")]
public Person Supervisor { get; set; }
public virtual ICollection<Person> SupervisedPersons { get; set; }
}
public class PersonDataContext : DbContext
{
public DbSet<Person> Persons { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>()
.HasKey(x => x.PersonId)
.HasOptional(op => op.Supervisor)
.WithMany(p => p.SupervisedPersons)
.WillCascadeOnDelete(false);
}
}