EF 4.1中的ComplexType Collection属性,代码优先

时间:2011-08-25 19:36:30

标签: asp.net-mvc-3 entity-framework-4.1 ef-code-first complextype

是否可以在POCO中创建属性,该属性是ComplexTypes的集合?

[ComplexType]
public class Attachment
{        
    public string FileName { get; set; }

    public byte[] RawData { get; set; }

    public string MimeType { get; set; }
}

public class TestObject
{
    public TestObject()
    {
        Attachments = new List<Attachment>();
    }

    public virtual ICollection<Attachment> Attachments { get; set; }
}

我有一种感觉,这是不可能的......我一直在尽力研究它,在我看来,由于多种原因,ComplexTypes比它们的价值更麻烦。

2 个答案:

答案 0 :(得分:3)

这是不可能的,但不是因为Slauma所说的概念不匹配,而是因为EF没有实现它。有关集合支持的更多详细信息,请查看this answer - 其他内容 - 。

那就是说,把它变成一个实体可能更好。您不需要包装它:您可以使用未映射的基本Attachment类型,然后使用特定的子类型。

答案 1 :(得分:2)

你的感觉是对的:这是不可能的。复杂类型的目的是将其属性作为列嵌入父类型的表中。如何将动态集合嵌入到表的一行中,从复杂类型集合的存储方式来看,您会对它有什么期望?

您需要的是一个普通的导航属性(基本上需要删除[ComplexType]属性)。在我的观察中,TestObjectAttachment之间的关系就像OrderOrderItem之间的关系:OrderItem唯一指的是Order OrderItems (它有一个指向订单的外键)并且可能启用级联删除,以确保项目与其订单一起被删除,并强调项目对订单的依赖性。通过使Attachments / {{1}}成为复杂类型,您还希望实现哪些其他特性?