我首先使用EF 4.1代码。我有一个用户模型和一个设置模型
每次存储库返回用户时,也会加载设置。我已经将设置标记为虚拟所有访问修饰符都是公共的LazyLoadingEnabled和ProxyCreationEnabled默认启用。
我错过了什么?
public class User : BaseEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public virtual ICollection<Setting> Settings { get; set; }
}
public class Setting
{
public int UserID { get; set; }
public int SettingID { get; set; }
public string Value { get; set; }
}
用户可能有多个设置,因此在设置中与外键有一对多的关系 用户配置是
public class UserConfiguration : EntityTypeConfiguration<User>
{
public UserConfiguration()
{
HasKey(u => u.ID);
HasMany(u => u.Settings).WithOptional().HasForeignKey(u => u.UserID);
}
}
,设置配置为:
public class SettingsConfiguration : EntityTypeConfiguration<Setting>
{
public SettingsConfiguration()
{
ToTable("UserSettings");
HasKey(s => new { s.UserID, s.SettingID });
}
}
答案 0 :(得分:3)
延迟加载意味着与您认为的含义相反。
Settings
User
第一次访问时,会检索Settings
。为了实现这一点,DbContext
必须在那时开放;否则你会得到例外Settings
User
Settings
将从不自动检索;它将返回 null (在我看来,这是一个糟糕的设计决定: null 是一个错误的值,你不应该得到它)在这两种情况下,您都可以使用Settings
热切地加载.Include(x => x.Settings)
,或者在需要时,通过调用context.Entry(user).Collection(x => x.Settings).Load()