EF 4.1 Code First не создает столбец для списка <string> - PullRequest
13 голосов
/ 14 мая 2011

Я довольно много играл с 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; }

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

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

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

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

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

Ответы [ 2 ]

20 голосов
/ 14 мая 2011

У меня для вас плохие новости. 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 будет сопоставлен со столбцом в базе данных.

1 голос
/ 14 мая 2011

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

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

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

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

...