我喜欢使用合成来分类类中的属性,以便在字段数增加时更容易使用它们。我的问题是,当我们在类中使用合成和ComplexTypes时,实体框架可以处理建模吗?当我一起使用这两个时,我在migrations
期间收到以下错误:
表达式' x => x.AllQuantities.OnHandUom'不是有效的 财产表达。表达式应该代表一个属性:C#: &#t; t => t.MyProperty' VB.Net:'功能(t)t.MyProperty'。
这是代码。这是一个简单的模型。
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public AllQuantities AllQuantities { get; set; }
}
注意,AllQuantities
是通过合成添加的复杂类型(我希望字段与产品显示在同一个表中,但我想将它们分组在AllQuanties下(实际上我还有更多字段,但我已经简化了这里的问题。))
[ComplexType]
public class AllQuantities
{
public double OnHand { get; set; }
public Uom OnHandUom { get; set; }
public int OnHandUomID { get; set; }
}
请注意,在我的Uom课程中,我正在尝试通过复杂类型将导航属性设置回产品。
public class Uom
{
public int ID { get; set; }
public string Name { get; set; }
public double QtyInUom { get; set; }
public virtual ICollection<Product> OnHandUoms { get; set; }
}
然后,我使用以下流畅的代码在我的上下文文件中设置模型,以便导航属性有效。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.HasRequired(x => x.AllQuantities.OnHandUom)
.WithMany(y => y.OnHandUoms)
.HasForeignKey(z => z.AllQuantities.OnHandUomID)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
注意
&#34; HasRequired(x =&gt;
x.AllQuantities.OnHandUom
)。&#34;
我认为点符号会导致某种问题。在我看来,它不应该。
我已经通过将我的ComplexType AllQuantities中的所有字段直接添加到产品中来尝试模型创建,按照正常情况,然后一切正常,但是,当我将上面列出的两个分开时,我得到前面提到的错误。我想使用ComplexType,以便我可以像字段一样分组。
我的问题是,有没有办法使用ComplexType和compostion进行上述工作?