是否可以将struct的字段存储在与包含类相同的表中?

时间:2011-08-16 21:21:24

标签: entity-framework

我目前正在使用Entity Framework 4和2011年6月的CTP(用于枚举支持),而且我很难在持久化类中嵌入结构体。我有一个Patient类,其中包含InclusionCriteria结构域(以及其他):

public class Patient
{
    public InclusionCriteria inclusionCriteria
    {
        get;
        set;
    }

    ...
}

结构很简单,有原始字段:

public struct InclusionCriteria
{
    public bool withStemi
    {
        get;
        set;
    }

    ...
}

运行系统后,很明显结构的数据没有被保存。当我查看生成的表时,结构不存在(作为外键或其他)。我希望struct的字段位于Patient表中,因此我没有为条件设置DbSet。我可能会这样做,但我宁愿把它全部放在同一张桌子上。这在实体框架中是否可行?

1 个答案:

答案 0 :(得分:7)

不支持结构。您必须使用类并将其映射为复杂类型。如果您使用代码优先方法,您可以尝试使其成为类并简单地重新创建数据库 - 如果您很幸运,它将自动映射为复杂类型。否则,您可以使用数据注释:

[ComplexType]
public class InclusionCriteria { ... } 

或流利的API:

modelBuilder.ComplexType<InclusionCriteria>(); 

如果您使用的是EDMX,请按this article创建复杂类型,然后this article使用它。

顺便说一下。 CTP 2011仅用于测试新功能,而不用于实际开发。它的内容可以在下一个CTP中改变。