В вашей сущности вы должны определить свойство как строку. 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
.