LmC*_*LmC 7 c# asp.net-mvc entity-framework one-to-many
我似乎无法解决我的映射问题; 关系是一个用户可能有很多场地,场地必须有一个用户.
我的venue
班级看起来像:
public class Venue : BaseObject, IBaseObject
{
[Required]
public virtual User Owner { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的User
班级看起来像:
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; }
}
Run Code Online (Sandbox Code Playgroud)
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; }
}
Run Code Online (Sandbox Code Playgroud)
当我User
从数据库加载类Venues
似乎总是为空?
我以前做过类似的事,但不记得我是如何重新安排的.
谢谢
ana*_*der 10
很确定这是一个懒惰的问题.如果你加载一个带有导航属性的对象,ICollection<Venues>
那么默认情况下它们就不会被包含,因为它们可能有更多的导航属性链接到更多的对象,这些对象可能有更多的导航属性......在你知道之前你就是加载一半的数据库.当您在访问该导航属性时已经处理了对象出现的上下文时,这是一个特殊问题,因为它没有数据库连接来加载它们,即使它确实意识到它应该这样做.
修复方法是告诉实体框架您希望填充该属性,方法是.Include(u => u.Venues);
在从中获取属性时添加DbSet
.你需要包含System.Data.Entity
以获得特定的重载Include()
.
归档时间: |
|
查看次数: |
8446 次 |
最近记录: |