我正在构建一个NET应用程序,它使用现有的MS数据库。主键和外键已在数据库级别上建立并正确工作。
我学习了这篇文章中的示例,并使用包管理器控制台从数据库反向工程模型和数据库上下文。这似乎很管用。它导致将所有模型添加到我的应用程序的models文件夹中,包括一个健壮的数据库上下文类。我遇到的问题是,关于这些实体的关系信息在运行时没有被填充。对于相关实体,在数据库中和由脚手架过程生成的fluent API代码中都建立了外键,我得到了空值。
我有两个表,模式和子模式,这是通过外键相关。
脚手架为上述两个表生成了这两个类:
public partial class Submode
{
public Submode()
{
Contact = new HashSet<Contact>();
}
public int Id { get; set; }
public int ModeId { get; set; }
public string Code { get; set; }
public bool Visible { get; set; }
public bool IsDefault { get; set; }
public Mode Mode { get; set; }
public ICollection<Contact> Contact { get; set; }
}
public partial class Mode
{
public Mode()
{
Contact = new HashSet<Contact>();
Submode = new HashSet<Submode>();
}
public int Id { get; set; }
public string Code { get; set; }
public bool Visible { get; set; }
public bool IsDefault { get; set; }
public ICollection<Contact> Contact { get; set; }
public ICollection<Submode> Submode { get; set; }
}
脚手架还在数据库上下文中生成了这个fluent API片段:
modelBuilder.Entity<Submode>(entity =>
{
entity.HasIndex(e => e.Code)
.HasName("UQ__Submode__A25C5AA75D2A9AE7")
.IsUnique();
entity.Property(e => e.Code)
.IsRequired()
.HasMaxLength(100)
.IsUnicode(false);
entity.HasOne(d => d.Mode)
.WithMany(p => p.Submode)
.HasForeignKey(d => d.ModeId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Submode_ModeId");
});
我所读过的关于使用fluent API设置外键的每个示例都显示了类似于上述片段的模式。但是对Submode来说,Mode返回为null。
我在返回的视图中得到一个空引用异常,因为我试图显示相关的Mode对象的属性。我是缺少了一些配置,还是脚手架代码有问题?
UDPATE --根据请求,下面是从数据库上下文中获取数据的实现。
public class SQLSubModeData : ISubModeData
{
private w4lkrContext _context;
public SQLSubModeData(w4lkrContext context)
{
_context = context;
}
public IQueryable<Submode> Get()
{
return _context.Submode.OrderBy(p => p.Id);
}
public Submode Get(int id)
{
return _context.Submode.FirstOrDefault(p => p.Id == id);
}
}
更新(解决)-启用延迟加载解决了问题。三步让我到了那里:
发布于 2018-09-01 09:03:01
https://stackoverflow.com/questions/52129455
复制相似问题