实体框架一对多-空虚拟集合

时间:2019-01-23 12:11:13

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

我有此代码的第一个数据库

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时,即使数据库中有链接到AspNetUser的系统警告,SystemWarnings集合也始终为空。

即使在同一个对象上,我也有一堆这样的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的身份标识具有很长的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跟踪...

1 个答案:

答案 0 :(得分:0)

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

给我自己一个提示..将每个1:n映射到另一个集合,否则会遇到麻烦。