簡體   English   中英

實體框架6延遲加載無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM