2015-09-20 75 views
1

我有这个CodeFirst实体模型一对一的关系延迟加载工作不C#

public partial class Initial 
{ 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    // more Properties 

    [Column(TypeName = "ntext")] 
    [Required] 
    public string CUD { get; set; } 

    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    public int Cuenta_Id { get; set; } 

    public virtual Cuentas Cuenta { get; set; } 
} 

public partial class Cuentas 
{ 
    public Cuentas() 
    { 
     //hash set for collection properties 
    } 

    public int Id { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string CUI { get; set; } 

    //properties 


    public virtual Initial Initial { get; set; } 

    public virtual Matriz Matriz { get; set; } 

} 

Initial类和Matriz两个相同的对象和任何那些被加载时,我执行:

Cuentas account = context.CuentasCtxt.Find(1); 
account.Initial.Counter++;// this give a null reference because 'Initial' is not loaded 

所有其他属性都装载良好,但这两个,奇点是这两个实体是他们有一个一对一的关系Cuentas实体

SQL模式看起来像这样sql schema

编辑: 这是实体框架Codefirst从数据库中如何使关系

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<Cuentas>() 
      .HasOptional(e => e.Inicial) 
      .WithRequired(e => e.Cuenta); 

     modelBuilder.Entity<Cuentas>() 
      .HasOptional(e => e.Matriz) 
      .WithRequired(e => e.Cuenta); 

     modelBuilder.Entity<Cuentas>() 
      .HasMany(e => e.Movimientos) 
      .WithRequired(e => e.Cuenta) 
      .HasForeignKey(e => e.Cuenta_Id) 
      .WillCascadeOnDelete(false); 
    } 
+0

你是否启用延迟加载?延迟加载是否适用于同一上下文中的其他属性? – StriplingWarrior

+0

其实是我的第一个猜测,但它很好,要完全确定我在上下文的构造函数中将Lazy load设置为true,并且仍然不工作 –

+0

我添加了一些关于我的codefirst关系的更多细节,我希望它可以帮助 –

回答

0

我发现我的错误,严重时fustration后,我发现了一个用户用未分配Initial对象的CUI相同,这就是为什么它具有null值。