是否可以在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比它们的价值更麻烦。
答案 0 :(得分:3)
这是不可能的,但不是因为Slauma所说的概念不匹配,而是因为EF没有实现它。有关集合支持的更多详细信息,请查看this answer - 其他内容 - 。
那就是说,把它变成一个实体可能更好。您不需要包装它:您可以使用未映射的基本Attachment
类型,然后使用特定的子类型。
答案 1 :(得分:2)
你的感觉是对的:这是不可能的。复杂类型的目的是将其属性作为列嵌入父类型的表中。如何将动态集合嵌入到表的一行中,从复杂类型集合的存储方式来看,您会对它有什么期望?
您需要的是一个普通的导航属性(基本上需要删除[ComplexType]
属性)。在我的观察中,TestObject
和Attachment
之间的关系就像Order
和OrderItem
之间的关系:OrderItem
唯一指的是Order
OrderItems
(它有一个指向订单的外键)并且可能启用级联删除,以确保项目与其订单一起被删除,并强调项目对订单的依赖性。通过使Attachments
/ {{1}}成为复杂类型,您还希望实现哪些其他特性?