繁体   English   中英

实体框架7导航关系对象引用未设置为对象实例

[英]Entity Framework 7 Navigation Relationships Object References Not Set to Instance of Object

我在sqlserver 2014中创建了一个数据库。我正在使用实体框架7,并且已通过dmx ef scaffolding命令对数据库进行了反向工程。

在我尝试访问导航属性之前,一切似乎都很好。 所有关系对象都为null,并给我错误:对象引用未设置为对象的实例。 数据库中存在伪数据,因此似乎从未实例化引用其他对象的属性。

知道我在做什么错吗?

Poco的:

public partial class Users
{
    public Users()
    {
        Orders = new HashSet<Orders>();
    }

    public int Id { get; set; }
    public bool Active { get; set; }
    public DateTime? BirthDate { get; set; }
    public DateTime Created { get; set; }
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public DateTime? Updated { get; set; }
    public string Username { get; set; }

    public virtual ICollection<Orders> Orders { get; set; }
}

public partial class Orders
{
    public Orders()
    {
        OrderLineItems = new HashSet<OrderLineItems>();
    }

    public int Id { get; set; }
    public bool Active { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public DateTime Created { get; set; }
    public string State { get; set; }
    public decimal SubTotal { get; set; }
    public decimal Tax { get; set; }
    public decimal Total { get; set; }
    public DateTime? Updated { get; set; }
    public int? UserId { get; set; }
    public string Zip { get; set; }

    public virtual ICollection<OrderLineItems> OrderLineItems { get; set; }
    public virtual Users User { get; set; }
}

内容:

public partial class DemoContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer(@"Data Source=localhost;Initial Catalog=Demo;Integrated Security=True");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Items>(entity =>
        {
            entity.Property(e => e.Active).HasDefaultValue(true);

            entity.Property(e => e.Cost).HasColumnType("decimal");

            entity.Property(e => e.Created)
                .HasColumnType("datetime")
                .HasDefaultValueSql("getdate()");

            entity.Property(e => e.Description)
                .IsRequired()
                .HasMaxLength(60);

            entity.Property(e => e.Number)
                .IsRequired()
                .HasMaxLength(30);

            entity.Property(e => e.Price).HasColumnType("decimal");

            entity.Property(e => e.Sku).HasMaxLength(30);

            entity.Property(e => e.Upc).HasMaxLength(30);

            entity.Property(e => e.Updated).HasColumnType("datetime");
        });

        modelBuilder.Entity<OrderLineItems>(entity =>
        {
            entity.Property(e => e.Active).HasDefaultValue(true);

            entity.Property(e => e.Created)
                .HasColumnType("datetime")
                .HasDefaultValueSql("getdate()");

            entity.Property(e => e.Updated).HasColumnType("datetime");

            entity.HasOne(d => d.Item).WithMany(p => p.OrderLineItems).HasForeignKey(d => d.ItemId);

            entity.HasOne(d => d.Order).WithMany(p => p.OrderLineItems).HasForeignKey(d => d.OrderId);
        });

        modelBuilder.Entity<Orders>(entity =>
        {
            entity.Property(e => e.Active).HasDefaultValue(true);

            entity.Property(e => e.Address)
                .IsRequired()
                .HasMaxLength(45);

            entity.Property(e => e.City)
                .IsRequired()
                .HasMaxLength(45);

            entity.Property(e => e.Created)
                .HasColumnType("datetime")
                .HasDefaultValueSql("getdate()");

            entity.Property(e => e.State)
                .IsRequired()
                .HasMaxLength(45);

            entity.Property(e => e.SubTotal).HasColumnType("decimal");

            entity.Property(e => e.Tax).HasColumnType("decimal");

            entity.Property(e => e.Total).HasColumnType("decimal");

            entity.Property(e => e.Updated).HasColumnType("datetime");

            entity.Property(e => e.Zip)
                .IsRequired()
                .HasMaxLength(9)
                .HasColumnType("varchar");

            entity.HasOne(d => d.User).WithMany(p => p.Orders).HasForeignKey(d => d.UserId);
        });

        modelBuilder.Entity<Users>(entity =>
        {
            entity.Property(e => e.Active).HasDefaultValue(true);

            entity.Property(e => e.BirthDate).HasColumnType("date");

            entity.Property(e => e.Created)
                .HasColumnType("datetime")
                .HasDefaultValueSql("getdate()");

            entity.Property(e => e.Email)
                .IsRequired()
                .HasMaxLength(50);

            entity.Property(e => e.FirstName)
                .IsRequired()
                .HasMaxLength(40);

            entity.Property(e => e.LastName)
                .IsRequired()
                .HasMaxLength(40);

            entity.Property(e => e.Password)
                .IsRequired()
                .HasMaxLength(60);

            entity.Property(e => e.Updated).HasColumnType("datetime");

            entity.Property(e => e.Username)
                .IsRequired()
                .HasMaxLength(40);
        });
    }

    public virtual DbSet<Items> Items { get; set; }
    public virtual DbSet<OrderLineItems> OrderLineItems { get; set; }
    public virtual DbSet<Orders> Orders { get; set; }
    public virtual DbSet<Users> Users { get; set; }
}

执行的代码:

var db = new DemoContext();
var orders = db.Orders.ToList();
var model = orders[0].User;
return View(model);

我在订单上的用户属性为空。 有任何想法吗???

在您可以删除U之前,我曾遇到过该问题

  Orders = new HashSet<Orders>();

并设置

  this.Configuration.LazyLoadingEnabled = true;

在用于延迟加载的上下文构造函数中,您不需要.include(.............)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM