[英]Entity Framework 6 Lazy Loading not working
我在EF6延遲加載時遇到了一些麻煩,首先將代碼編碼到現有數據庫中。
這些是給我這個問題的實體,我不知道為什么它不起作用,我在網上找到的所有內容都說它應該起作用。
public class User
{
public long UserId { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Token> Tokens { get; set; }
public virtual ICollection<Business> Businesses { get; set; }
public virtual ICollection<Candidate> Candidates { get; set; }
}
這是配置映射:
public class Token
{
public long TokenId { get; set; }
public long UserId { get; set; }
public Guid TokenValue { get; set; }
public DateTime ExpirationDate { get; set; }
public virtual User User { get; set; }
}
public TokenMap()
{
this.HasKey(t => t.TokenId);
this.Property(t => t.TokenValue)
.IsRequired();
this.Property(t => t.ExpirationDate)
.IsRequired();
this.ToTable("Tokens");
this.Property(t => t.TokenId).HasColumnName("TokenId");
this.Property(t => t.UserId).HasColumnName("UserId");
this.Property(t => t.TokenValue).HasColumnName("TokenValue");
this.Property(t => t.ExpirationDate).HasColumnName("ExpirationDate");
this.HasRequired(s => s.User)
.WithMany(s=>s.Tokens)
.HasForeignKey(s=>s.UserId);
}
public UserMap()
{
this.ToTable("Users");
this.HasKey(t => t.UserId);
this.Property(t => t.Email)
.IsRequired();
this.Property(t => t.FirstName)
.IsRequired();
this.Property(t => t.LastName)
.IsRequired();
this.HasMany(t => t.Businesses)
.WithMany(set => set.Users)
.Map(m =>
{
m.ToTable("BusinessUser");
m.MapLeftKey("UserId");
m.MapRightKey("BusinessId");
});
this.HasMany(s => s.Tokens)
.WithRequired(s => s.User)
.HasForeignKey(s => s.UserId);
this.HasMany(s => s.Candidates)
.WithOptional(s => s.User)
.HasForeignKey(s => s.UserId);
}
以下是上下文中的一些片段:
public DbSet<Token> Token { get; set; }
public DbSet<User> User { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new TokenMap());
modelBuilder.Configurations.Add(new UserMap());
}
每當我對令牌實體執行SingleOrDefault時,結果的用戶為null。
知道我在做什么錯嗎? 數據庫中的所有數據都是正確的,並且UserId確實有一個值。
這是一個更詳細的調用示例:
我正在實現存儲庫模式。
在執行“構造函數”的類中,我有:
context = new Consolid8ContextProvider();
uow = new UnitOfWork(context);
然后uow.Tokens.First(u => u.ExpirationDate > DateTime.Now && u.TokenValue == token);
令牌是我的TokenRepository,它公開了Tokens實體,而First是FirstOrDefault的包裝。
這將導致令牌對象具有所有設置的屬性,但“用戶”導航屬性除外
因此,我使用的是BreezeJS,它使用自己的設置覆蓋了您的上下文,其中一部分是將LazyLoading和EnableProxiesCreation設置為false。
因此,如果您想在微風之外進行查詢,則必須為微風提供者實現一個不同的構造函數,或者按照Slauma在問題注釋中建議的方式為每個查詢設置它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.