EF 4.1 Code First не создает столбец для списка <string>

Я очень много играл с EF4 Code First, и мне это нравится. Тем не менее, я не могу сортировать этот простой.

При попытке создать что-то вроде этого в моей базе данных не создаются столбцы:

    public IList<String> Recievers { get; set; }
    public List<String> RecieversTest { get; set; }

    public virtual List<String> RecieversAnotherTest { get; set; }
    public virtual ICollection<Int32> RecieversAnotherTest { get; set; }

Ive попробовал аннотации, чтобы сопоставить его с другим именем столбца, я пробовал IEnumerable и всевозможные другие коллекции, но он отказывается создавать для него столбец.

Через час в google я нашел тот, который утверждает, что она это сделала, но я начинаю сомневаться в этом. Должно ли это быть возможно?

Я не могу понять, почему он просто не создает столбец и использует JSON или CSV. Это не может быть так редко, не так ли? В моем случае я просто хочу сохранить список писем.

Что мне не хватает? Проект создает все другие типы без проблем, и я проверил базу данных, чтобы увидеть, как другие свойства, которые я добавляю для тестирования, создаются, в то время как они игнорируются.

Таким образом, проблема должна лежать в какой-то настройке, которую мне не хватает или какой-то конфигурации.... EF 4.1 RTW на SQL Server 2008 db.

Ответы

Ответ 1

У меня плохие новости для вас. EF не делает ничего подобного. Если вам нужна сериализация и десериализация, вы должны сделать это самостоятельно = вы должны выставить и отобразить свойство с сериализованным значением:

private IList<String> _receivers;
// This will be skipped
public IList<String> Receivers 
{ 
    get
    {
        return _receivers;
    }
    set
    {
        _receivers = value;
    } 
}

// This will be mapped
public string ReceiversSer
{
    get
    {
        return String.Join(";", _receivers);
    }
    set
    {
        _receivers = value.Split(';').ToList();
    }
}

Теперь ReceiversSer будет сопоставлен с столбцом в базе данных.

Ответ 2

У вас не может быть столбец, основанный на коллекции/списке чего-то. Столбец представляет собой особый элемент, такой как public string Receiver.

Если вы ожидаете, что EF CF возьмет ваш IList или List и выведет из него несколько столбцов, вы будете правы в том, что это не будет.

В EF CF вы создаете списки в своем Entity для представления отношения к другой таблице. У Ордена может быть много элементов в нем. В этом случае вы должны иметь класс Order со списком объекта OrderItem.

У вас будет класс OrderItem для описания таблицы OrderItem. Тогда это будет по существу представлять соотношение между 1 и многими элементами Order и OrderItems.