首页 > 解决方案 > 实体框架一对多 - 空虚拟集合

问题描述

我有这个代码第一个数据库

public partial class SystemWarning
{

    [Key]
    public long Id { get; set; }

    /// <summary>
    /// id of the admin that created the entry
    /// </summary>
    public string CreatedById { get; set; }

    public virtual AspNetUser CreatedBy { get; set; }

    public string AcknowledgedById { get; set; }

    public virtual AspNetUser AcknowledgedBy { get; set; }

}
public partial class AspNetUser
{
    public AspNetUser()
    {
        SystemWarnings = new HashSet<SystemWarning>();
    }

    [Key]
    public string Id { get; set; }

    public virtual ICollection<SystemWarning> SystemWarnings { get; set; }

}

并链接在一起如下

        modelBuilder.Entity<AspNetUser>()
            .HasMany(e => e.SystemWarnings)
            .WithOptional(e => e.CreatedBy)
            .HasForeignKey(e => e.CreatedById).WillCascadeOnDelete(false);

由于目前我无法理解的原因,当我提取 AspNetUser 时,SystemWarnings 集合始终为空,即使数据库中存在链接到 AspNetUser 的系统警告。

我有一堆这些 1-n 链接,即使在同一个对象上,其他链接仍然非空,现在我没有看到差异。

@edit:这是另一个用于比较的对象:

    public partial class UserProfile: BaseObject
{

    public Guid Id { get; set; }

    public string OwnerId { get; set; }

    public virtual AspNetUser Owner { get; set; }

}

and the mapping

            modelBuilder.Entity<AspNetUser>()
            .HasMany(e => e.OwnedUserProfiles)
            .WithOptional(x => x.Owner)
            .HasForeignKey(x => x.OwnerId);

对我来说似乎是一样的,除了 SystemWarning 有一个 long as Id 和身份规范(之前忘了发布 - 它的定义如下)

modelBuilder.Entity<SystemWarning>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

而且那个 SystemWarning 实际上有另一个对我现在添加的 AspNetUser 的引用 (AcknowledgedBy(Id)),它的链接如下

            modelBuilder.Entity<AspNetUser>()
            .HasMany(e => e.SystemWarnings)
            .WithOptional(e => e.AcknowledgedBy)
            .HasForeignKey(e => e.AcknowledgedById).WillCascadeOnDelete(false);

我会尽快发布 SQL 跟踪...

标签: entity-framework-6one-to-many

解决方案


好吧,那个编辑成功了。从 SystemWarning 到 AspNetUser 的两个链接都映射到 SystemWarnings 集合上。难怪这没有按预期的方式工作。

注意我自己.. 将每 1:n 映射到不同的集合,否则会有麻烦。


推荐阅读