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