我目前正在使用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
。我可能会这样做,但我宁愿把它全部放在同一张桌子上。这在实体框架中是否可行?
答案 0 :(得分:7)
不支持结构。您必须使用类并将其映射为复杂类型。如果您使用代码优先方法,您可以尝试使其成为类并简单地重新创建数据库 - 如果您很幸运,它将自动映射为复杂类型。否则,您可以使用数据注释:
[ComplexType]
public class InclusionCriteria { ... }
或流利的API:
modelBuilder.ComplexType<InclusionCriteria>();
如果您使用的是EDMX,请按this article创建复杂类型,然后this article使用它。
顺便说一下。 CTP 2011仅用于测试新功能,而不用于实际开发。它的内容可以在下一个CTP中改变。