我有一个具有以下属性的类
public class Booking
{
public long BookingId {get;set;}
public string RoomNumber {get;set;}
[ForeignKey("BookingCustomer")]
public long? BookingCustomerId {get;set;}
public virtual Customer BookingCustomer {get;set;}
}
public class Customer
{
public long CustomerId {get;set;}
public string FirstName {get;set;}
}
如果在方法中我引用了客户类的属性,则在填充BookingCustomerId时会获得对象空引用异常。。
hotel.BookingCustomerId=2
例如, string customerFirstName = hotel.BookingCustomer.FirstName; 如果我偷看酒店.BookingCustomer我得到null 我如何进行这种延迟加载?
答案 0 :(得分:0)
如果相关实体返回为null,则意味着实体框架所理解的关系无法找到任何相关实体。
您似乎正在使用数据注释来标记属性(如外键)的属性。您可能还需要使用[key]属性标记主键。
您还需要在客户数据中添加相关的预订实体。
另外,您可以使用流利的api在您的上下文中执行以下操作。
// Configure the primary key for the Booking
modelBuilder.Entity<Booking>()
.HasKey(t => t.BookingID);
modelBuilder.Entity<Booking>()
.HasRequired(t => t.customer)
.WithRequiredPrincipal(t => t.booking);
更多关于流利的图片: https://msdn.microsoft.com/en-us/data/jj591620.aspx#RequiredToRequired
答案 1 :(得分:0)
延迟加载意味着当第一次使用该对象的getter时,将检索相关对象。 就在那时,执行对数据库的查询以检索该对象,例如Hotel.BookingCustomer。
尝试查看查询是否确实已执行,例如使用Sql Server Profiler。 检查查询以确保一切正确
如果您无法看到触发的查询,请尝试不使用虚拟关键字(急切加载),然后查看它是否有效。