“序列不包含任何元素” - 可选的外键

时间:2013-08-12 12:06:41

标签: c# database entity-framework

我只是手动将外键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; }

1 个答案:

答案 0 :(得分:1)

我认为你误用了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);
        }
    }