Как сообщить объектной структуре, как сохранять экземпляры пользовательского типа (которые могут быть сохранены как скаляр) - PullRequest
7 голосов
/ 26 февраля 2012

Один из моих классов сущностей можно было бы сохранить в базе данных сервера SQL как BIGINT.У меня вопрос: как мне получить контекст Entity Framework, чтобы знать, как хранить и извлекать экземпляры моего класса сущностей?

Подробнее.Я использую Noda Time , который может представлять (намного) более широкий диапазон дат, чем SQL или .NET datetime (И это вершина десерта).My Entity Class, Happening, является оболочкой для класса Instant NodaTime.Я могу установить Happening из long и получить long из происходящего с помощью таких методов, как .SetFromLong (long instant) и .ToLong ().

В настоящее время моя модель работает, сохраняя классы, которые содержат свойстватип точечной сети DateTime.Если вместо этого я хочу использовать свойства моего пользовательского типа «Happening», как мне сообщить Entity Framework, как их сохранить?

Если я читаю эту статью о моделировании и картографии, то я на правильном пути илиотсутствует что-то попроще?

http://msdn.microsoft.com/en-us/library/bb896343.aspx

Я использую Entity Framework 4.

1 Ответ

7 голосов
/ 26 февраля 2012

Что я рекомендую сделать, так это добавить 2 свойства вашей сущности - NodaTime и long, и исключить свойство NodaTime, используя [NotMapped] в вашей модели EF, а затем в обновлении get / setter обновите long.

е

public class MyEntity{
   public long TimeAsLong{get;set;}
   [NotMapped]
   public Happening {
      get{
        return new Happening().SetFromLong(TimeAsLong);
      }
      set {
         TimeAsLong = value.ToLong();
      }
   }
}

Результатом этого будет то, что long хранится в БД, но вы можете получить к нему доступ через класс NodaTime

...