Код EF первый Список <DateTime>не создает таблицу - PullRequest
1 голос
/ 01 декабря 2011

Я создаю очень простой первый проект с кодом EF4 с одной сущностью.

public class Activity
{
    public Guid Id { get; set; }
    public string Description { get; set; }
    public List<DateTime> DateDone { get; set; }
    <snip>

    public Activity()
    {
        if(DateDone==null)
            DateDone = new List<DateTime>();
    }
}

Я перестраиваю свой проект и затем запускаю приложение MVC3, и база данных генерирует (подтверждено, я добавил и удалил столбцы), мои данные заполнены (они меняются на экране, когда я изменяю заполненные данные)

Я могу:

var activity = db.Activities.Find(id);
activity.DateDone = DateTime.Now;
db.SaveChanges();

Но данные не сохраняются.Я проверил базу данных, так как есть только одна таблица (Activity), и в ней есть все соответствующие поля.Я ожидаю, что у него должна быть вторая таблица, ActivityDateDone с двумя полями ActivityGuid и DateDone.

Чего мне не хватает при выполнении этой работы?

Ответы [ 3 ]

6 голосов
/ 01 декабря 2011

Entity Framework не поддерживает коллекции примитивных типов.

Вам необходимо определить отдельный класс для хранения DateTimes.

2 голосов
/ 01 декабря 2011

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

0 голосов
/ 04 мая 2017

Хотя Entity Framework изначально не поддерживает это, вы можете заставить его работать довольно хорошо.

Пожалуйста, смотрите этот ответ для дополнительного кода (PersistableScalarCollection) и оригинальной идеи: https://stackoverflow.com/a/11990836/1742393

/// <summary>
///     ALlows persisting of a simple DateTime collection.
/// </summary>
[ComplexType]
public class PersistableDateTimeCollection : PersistableScalarCollection<DateTime>
{
    protected override DateTime ConvertSingleValueToRuntime(string rawValue)
    {
        return DateTime.Parse(rawValue);
    }

    protected override string ConvertSingleValueToPersistable(DateTime value)
    {
        return value.ToShortDateString();
    }
}
...