实体框架6延迟加载返回null

时间:2015-01-24 09:06:51

标签: c# entity-framework-6

我有一个具有以下属性的类

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 我如何进行这种延迟加载?

2 个答案:

答案 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。 检查查询以确保一切正确

如果您无法看到触发的查询,请尝试不使用虚拟关键字(急切加载),然后查看它是否有效。