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()的特定重载. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |