【问题标题】:"Sequence contains no elements" - Optional foreign key“序列不包含任何元素” - 可选外键
【发布时间】:2013-08-12 22:36:17
【问题描述】:

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

【问题讨论】:

  • 我不明白,您的 UserProfile 实体是否包含相同类型的属性?
  • @KirillBestemyanov 好吧,它可以选择引用另一个 UserProfile。差不多就是这样。

标签: c# database entity-framework


【解决方案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);
        }
    }

【讨论】:

  • @JordanAxe 你在UserProfile(一些ID)中有任何Key 字段吗?
  • @JordanAxe 你想通过这种结构实现什么样的关系?一对一还是一对多?
  • 每个用户配置文件都可以包含对另一个用户配置文件的可选引用。
  • @JordanAxe 所以它还可以包含0..n 引用的配置文件(那些将其用作Referer 的配置文件)。
  • 抱歉回复晚了。那么推荐人不会引用将其作为推荐人的用户配置文件。每个用户配置文件可以包含 0..1 个用户配置文件
猜你喜欢
  • 2015-09-04
  • 2015-02-19
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2017-05-27
相关资源
最近更新 更多