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.