2013-06-19 8 views
3

У меня есть простой массив внутри модели с использованием структуры сущности 5. Массив не будет сохранен внутри таблицы.Entity Framework 5 не сохраняет строку массива

Модель

public class MyModel: IEntity 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public IList<string> MyArray { get; set; } 
} 

Config

DbContext.Configuration.ProxyCreationEnabled = true; 
    DbContext.Configuration.LazyLoadingEnabled = true; 
    DbContext.Configuration.ValidateOnSaveEnabled = false; 

Initializer

internal class DatabaseInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext> 
{ 
    protected override void Seed(DatabaseContext context) 
    { 
     context.MyModels.Add(new MyModel { 
      MyArray = new [] { "Value1", "Value2" } 
     }); 
    } 
} 

Любой намек, почему это делает не Работа. Событие MyArray не является столбцом.

+4

вы знаете базу данных, где у вас есть тип столбца, который является массивом? Я этого не делаю, платформа Entity Framework, вероятно, тоже не работает, поэтому она не создается как столбец. В нормализованной модели у вас должен быть другой объект/таблица, чтобы сохранить ваши значения «Значения» и отношения «один ко многим» с MyModel. –

+1

@ RaphaëlAlthaus Да, возможно, NHibernate. Вы также можете делать фантазии с ним, как размахивая JSON. http://www.philliphaydon.com/2012/03/ormlite-blobbing-done-with-nhibernate-and-serialized-json/ – Phill

+0

@ Raphaël Althaus ожидал, что он сериализуется, ничего особенного ... и уже поздно для использования другого o/r mapper. –

ответ

1

Вместо использования массива строк вы можете использовать простой столбец строк с каким-то разделителем типа ';' или «|», все будет сделано. Просто убедитесь, что при извлечении данных из базы данных вы вызываете метод C# String.Split, передавая ему тот же разделитель, что и параметр.

Например:

string stringToBePersisted = "First Value|Second Value|Third Value"; 

string[] stringsRetrieved = columnValue.Split('|'); 
Смежные вопросы