Codefirst Migrations不使用EntityFramework,MVC5,ComplexType和流畅

时间:2015-10-19 09:15:43

标签: c# entity-framework-6 ef-migrations fluent asp.net-mvc-5.2

我喜欢使用合成来分类类中的属性,以便在字段数增加时更容易使用它们。我的问题是,当我们在类中使用合成和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进行上述工作?

0 个答案:

没有答案