Свойство коллекции ComplexType в EF 4.1 с первым кодом - PullRequest
3 голосов
/ 25 августа 2011

Можно ли создать свойство в 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 ]

3 голосов
/ 26 августа 2011

Это невозможно, но не из-за концептуального несоответствия, как сказал Слаума, а потому, что EF не реализует его.Посмотрите на этот ответ для получения дополнительной информации о поддержке сбора - среди прочего -.

Тем не менее, вероятно, лучше сделать его сущностью.Вам не нужно оборачивать это: у вас может быть базовый тип Attachment, который не сопоставлен , а затем конкретные подтипы, которые являются.

2 голосов
/ 25 августа 2011

Ваше чувство верно: это невозможно. Назначение сложного типа состоит в том, чтобы встроить его свойства в виде столбцов в таблицу родительского типа. Как можно встроить динамическую коллекцию в строку таблицы и что можно ожидать от коллекции сложного типа с точки зрения того, как она хранится?

На самом деле вам нужно обычное свойство навигации (в основном, атрибут [ComplexType] необходимо удалить). По моему мнению, ваши отношения между TestObject и Attachment подобны отношениям между Order и OrderItem: OrderItem относится только к одному Order (у него есть один внешний ключ, который указывает на порядок ) и возможно каскадное удаление включено, что гарантирует удаление элементов вместе с их порядком и подчеркивает зависимость элементов от заказа. Что еще и особенного вы хотите достичь, превратив OrderItems / Attachments в сложный тип?

...