假设我有一个名为“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的定义,它就有效......
有没有办法在另一个复杂类型中添加嵌套复杂类型?
答案 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>();
}