C# Codefirst迁移不适用于EntityFramework、MVC5、ComplexType和fluent

C# Codefirst迁移不适用于EntityFramework、MVC5、ComplexType和fluent,c#,entity-framework-6,entity-framework-migrations,fluent,asp.net-mvc-5.2,C#,Entity Framework 6,Entity Framework Migrations,Fluent,Asp.net Mvc 5.2,我喜欢使用组合将类中类似的属性分组,以便在字段数量增加时更易于使用。我的问题是,当我们在类中使用组合和复杂类型时,实体框架能处理建模吗?当我将两者结合使用时,在迁移过程中会出现以下错误: 表达式“x=>x.AllQuantilities.OnHandUom”不是有效的 属性表达式。表达式应表示一个属性:C#: 't=>t.MyProperty'VB.Net:'Function(t)t.MyProperty' 这是代码。这是一个简单的模型 public class Product { pu

我喜欢使用组合将类中类似的属性分组,以便在字段数量增加时更易于使用。我的问题是,当我们在类中使用组合和复杂类型时,实体框架能处理建模吗?当我将两者结合使用时,在迁移过程中会出现以下错误:

表达式“x=>x.AllQuantilities.OnHandUom”不是有效的 属性表达式。表达式应表示一个属性:C#: 't=>t.MyProperty'VB.Net:'Function(t)t.MyProperty'

这是代码。这是一个简单的模型

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    public AllQuantities AllQuantities { get; set; }
}
注意,
AllQuantities
是通过组合添加的复杂类型(我希望字段显示在与产品相同的表中,但我希望将它们分组在AllQuanties下(实际上我有更多的字段,但我简化了这里的问题。)

请注意,在我的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; }
}
公共类计量单位
{
公共int ID{get;set;}
公共字符串名称{get;set;}
公共双QTYNUOM{get;set;}
handuoms{get;set;}上的公共虚拟ICollection
}
然后,我使用以下fluent代码在我的上下文文件中设置模型,以便导航属性工作

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);
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(x=>x.allquanties.OnHandUom)
.有许多(y=>y.onhanduom)
.HasForeignKey(z=>z.allquanties.OnHandUomID)
.WillCascadeOnDelete(假);
基于模型创建(modelBuilder);
}
注意

“HasRequired(x=>
x.allamounts.OnHandUom
)”

我相信点符号会引起某种问题。在我看来,不应该

我已经尝试过通过将ComplexType AllQuantilities中的所有字段直接添加到产品中来创建模型,这是正常的,然后一切都正常工作,但是,当我按照上面列出的方式将这两个字段分开时,我得到了前面提到的错误。我想使用ComplexType,这样我可以像字段一样分组

我的问题是,有没有办法让上面的工作与一个复杂的类型和组合

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);
}