Код объекта Первый пользовательский тип данных - PullRequest
0 голосов
/ 23 февраля 2011

2 Вопросы относительно пользовательских типов данных в Entity Framework и автоматического выполнения задач ...

  1. У меня есть класс, который может предоставить строковое представление о себе и построить себя изстрока.Есть ли способ включить этот класс как свойство класса E-CF и создать под ним строку?например:

    public class MySpecialClass
    {
        public MySpecialClass(string _data)
        {
        } // eo ctor
    
    
        public string ToString()
        {
        } // eo ToString
    } // eo MySpecialClass
    
    
    public class EntityObject
    {
        public MySpecialClass Special {get; set; }
    } // eo class EntityObject
    

    Это было бы действительно полезно!

  2. У меня есть целая куча классов, в которых есть такие вещи, как CreatedBy, ModifiedBy, ModifiedDate и так далее.Есть ли простой способ автоматически установить их, когда объект создается впервые или когда он изменяется позднее?В идеале я хотел бы, чтобы событие, к которому я мог подключиться, реализовало такое поведение, поскольку некоторые из моих объектов действительно требуют записи в таблицу «истории», если некоторые поля изменяются.На самом деле, есть ли способ сделать это тоже?Чтобы узнать, было ли изменено определенное поле во время обновления?

1 Ответ

1 голос
/ 23 февраля 2011

В вашей сущности вы должны определить свойство как строку. EF не умеет работать с пользовательскими классами. Каждый сгенерированный класс сущности определен как частичный, так что вы можете определить дополнительное свойство в частичном классе, которое будет работать с экземпляром вашего типа:

// EF generated part
public partial class EntityObject
{
  protected string SpecialString { get; set; }
}

// Your part
public partial class EntityObject
{
  public MySpecialClass Special
  {
    get
    {
      return MySpecialClass.Deserialize(SpecialString);
    }
    set
    {
      SpecialString = MySpecialClass.Serialize(value);
    }
  }
}

Вы не сможете использовать Специальное свойство в запросах Linq-To-Entities.

Edit:

Я не заметил, что вы используете Код-первых. В таком случае вы не используете частичные занятия для сущностей и вас может использовать тот же подход в одном объекте где MySpecialClass будет отмечен NotMappedAttribute.

Ваш второй вопрос - это обычно ответственность за уровень доступа к данным (в настоящее время очень популярный шаблон хранилища). В EF доступны только встроенные события

  • ObjectCotnext.ObjectMaterialized - срабатывает при загрузке данных из БД и создании экземпляра объекта
  • ObjectContext.SavingChanges - срабатывает до того, как EF выполнит изменения в БД

Вы можете добавить некоторые пользовательские события, если переопределите метод SaveChanges.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...