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

前端之家收集整理的这篇文章主要介绍了c# – EF 6 – 一对多映射始终为空前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎无法解决我的映射问题;关系是一个用户可能有很多场地,场地必须有一个用户.

我的场地类看起来像:

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()的特定重载.

猜你在找的C#相关文章