2015-06-14 94 views
0

我目前正在处理新的EF7,并且处理一对一关系时遇到了奇怪的行为。EF7一对一的关系

我有以下型号

public class Material 
{ 
    [Key] 
    [Required] 
    [Column(TypeName = "bigint")] 
    public long Id { get; set; } 

    [Required] 
    [MaxLength(128)] 
    public string Name { get; set; } 

    [Required] 
    [MaxLength(512)] 
    public string Description { get; set; } 

    [Required] 
    [Column(TypeName = "money")] 
    public decimal CostPerUnit { get; set; } 

    public virtual Unit UnitOfMeasure { get; set; } 

    [Required] 
    [Column(TypeName = "bit")] 
    public bool IsActive { get; set; } = false; 
} 


public class Unit 
{ 
    [Key] 
    [Column(TypeName = "bigint")] 
    public long Id { get; set; } 

    [Required] 
    [MaxLength(32)] 
    public string Name { get; set; } 

    [Required] 
    [MaxLength(64)] 
    public string Description { get; set; } 

    [Required] 
    public string Type { get; set; } 
} 

和我建立的表如下:

builder.Entity<Unit>().Key(u => u.Id); 
builder.Entity<Unit>().Property(u => u.Name).MaxLength(64).Required(); 
builder.Entity<Unit>().Property(u => u.Description).Required(); 
builder.Entity<Unit>().Property(u => u.Type).Required(); 

builder.Entity<Material>().Key(m => m.Id); 
builder.Entity<Material>().Property(m => m.Name).Required(); 
builder.Entity<Material>().Property(m => m.Description).Required(); 
builder.Entity<Material>().Property(m => m.CostPerUnit).Required(); 
builder.Entity<Material>().Property(m => m.IsActive).Required(); 

说我遇到的问题是现在,当我尝试和查询的材料使用度量单位,度量单位始终设置为空,但在检查生成的表时,我可以清楚地看到外键实际上已创建。

我也试图强制在OnModel创建关系,但我仍然无法检索单元对象。

builder.Entity<Material>().Reference(m => m.UnitOfMeasure).InverseReference().ForeignKey<Unit>(u => 

我应该如何添加这个引用,或者这甚至支持吗?

回答

0

你如何获得参考?此时的延迟加载在EF7中不起作用。您必须执行加载(dbContext.Materials.Include(m => m.UnitOfMeasure))或其显式版本。

+0

是的懒加载是我期待,不知道为什么它不工作。在此期间,我不得不急切地加载对象,但真的希望我不必这样做。这是beta5 – Marqueone