加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – EF 6 – 一对多映射始终为空

发布时间:2020-12-15 17:50:17 所属栏目:百科 来源:网络整理
导读:我似乎无法解决我的映射问题;关系是一个用户可能有很多场地,场地必须有一个用户. 我的场地类看起来像: public class Venue : BaSEObject,IBaSEObject{ [Required] public virtual User Owner { get; set; } [Required] [MaxLength(50)] public string Name
我似乎无法解决我的映射问题;关系是一个用户可能有很多场地,场地必须有一个用户.

我的场地类看起来像:

public class Venue : BaSEObject,IBaSEObject
{
    [Required]
    public virtual User Owner { get; set; }

    [Required]
    [MaxLength(50)]
    public string Name { get; set; }
}

我的用户类看起来像:

public class User : BaSEObject,IBaSEObject
{

    [Required]
    public string Name { get; set; }

    [Required]
    [DisplayName("Email")]
    public string EmailAddress { get; set; }

    [Required]
    public string Password { get; set; }

    public bool Active { get; set; }


    public virtual ICollection<Venue> Venues { get; set; } 
}

DbContextClass按要求

public class SystemContext : DbContext,IDbContext
{
    public SystemContext() :
        base("SystemContext")
    {
        Database.SetInitializer<SystemContext>(null);
        Configuration.ProxyCreationEnabled = false;
        Configuration.LazyLoadingEnabled = true;
    }


    public SystemContext(string connectionstringname = "SystemContext") :
        base(connectionstringname)
    {
        Database.SetInitializer<SystemContext>(null);
        Configuration.ProxyCreationEnabled = false;


    }
    public new IDbSet<T> Set<T>() where T : class
    {
        return base.Set<T>();
    }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<User>().HasMany(x=>x.Venues);
    }



    public DbSet<PublicQueries> PublicQueries { get; set; }
    public DbSet<Venue> Venues { get; set; }
    public DbSet<User> Users { get; set; }
}

当我从数据库加载User类时,Venues似乎总是为空?

我以前做过类似的事,但不记得我是如何重新安排的.

谢谢

解决方法

很确定这是一个懒惰的问题.如果加载具有导航属性的对象,例如ICollection< Venues>默认情况下它们不会包含在内,因为它们可能有更多的导航属性链接到更多的对象,这些对象可能有更多的导航属性……在你知道它之前你加载了一半的数据库.当您在访问该导航属性时已经处理了对象出现的上下文时,这是一个特殊问题,因为它没有数据库连接来加载它们,即使它确实意识到它应该这样做.

修复方法是通过添加.Include(u => u.Venues)告诉实体框架您希望填充该属性.当你从DbSet中获取它们时.您需要包含System.Data.Entity以获取Include()的特定重载.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读