.net core - 模型虚拟属性未加载

Poo*_*ghy 2 c# entity-framework asp.net-core

在我的 .net core 2 项目中,我有用户和文件模型,它们有关系。在模型和数据库中;

用户模型:

[DefaultValue(null)]
public int? AvatarId { get; set; }
[ForeignKey("AvatarId")]
public virtual File Avatar { get; set; }
Run Code Online (Sandbox Code Playgroud)

文件模型:

[InverseProperty("Avatar")]
public ICollection<User> Users { get; set; }
Run Code Online (Sandbox Code Playgroud)

我通过这个查询得到我的用户

var user = this._db.User.Include(u => u.Avatar).FirstOrDefault(o => o.Id == id);
Run Code Online (Sandbox Code Playgroud)

在上下文中:

modelBuilder.Entity<User>()
            .HasOne<File>(u => u.Avatar)
            .WithMany(f => f.Users)
            .HasForeignKey(u => u.AvatarId);
Run Code Online (Sandbox Code Playgroud)

如果用户有头像或没有头像,头像属性返回null。

Tan*_*jel 5

Entity Framework Core 2.0 不支持虚拟导航属性的延迟加载。

它已添加到实体框架 2.1 中。因此,您必须将应用程序升级到 ASP.NET Core 2.1。

然后安装Microsoft.EntityFrameworkCore.Proxiesnuget包ConfigureServices(),在Startup类的方法中进行如下配置。

services.AddDbContext<YourDbContext>(
    b => b.UseLazyLoadingProxies()
          .UseSqlServer(YourConnectionString));
Run Code Online (Sandbox Code Playgroud)

以下是有关 Entity Framework Core 2.1 中延迟加载的更多详细信息:

  1. 实体框架 2.1 中的新增功能
  2. 延迟加载文档