EF 6:另一种复杂类型的嵌套复合类型

时间:2013-12-02 15:38:18

标签: c# entity-framework

假设我有一个名为“car”的实体。

我使用复杂类型来定义“引擎”部分。

[TableName("T_CAR")]
public sealed class Car:IEngine
{
  ...
  public EngineType EngineType{get;set;}

}

[ComplexType]
public sealed class Engine:IEngine
{

  public Engin( )
  {
    this.EnginType = new EngineType( );
  }

  public EngineType EngineType{get;set;}

  // other properties ...

}

[ComplexType]
public sealed class EngineType:IEngineType
{
  ...     
}

当我运行此代码时,我收到来自EF 6的错误消息:

System.InvalidOperationException:“Engine”类型已被配置为实体类型。它不能重新配置为复杂类型。

如果我删除EngineType的定义,它就有效......

有没有办法在另一个复杂类型中添加嵌套复杂类型?

2 个答案:

答案 0 :(得分:6)

编辑:这已经改变,EF6现在支持嵌套的复杂类型,只需记住将每个类型设置为复杂类型。

public class EngineConfiguration : ComplexTypeConfiguration<Engine>
{
}
public class EngineTypeConfiguration : ComplexTypeConfiguration<EngineType>
{
}

然后在你的背景下:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new EngineConfiguration());
    modelBuilder.Configurations.Add(new EngineTypeConfiguration());
}

原始答案:不,ComplexTypes可能只包含基本类型。我在Julie Lermans的书中首先看到了这一点 Programming entity framework code first, 我不相信EF6中已经解除了这个限制。

答案 1 :(得分:3)

是。在我的应用程序中,我使用嵌套类型。但是看着你的代码,我无法发现错误。我使用了流畅的配置而不是数据属性。

protected sealed override void OnModelCreating(DbModelBuilder modelBuilder)
  modelBuilder.ComplexType<SampleComplexType>();
}