Спасибо Mystere Man, у меня есть ответ. И это намного проще, чем я думал.
У других может быть другой подход, но ключевая информация одинаков.
Создайте частичный класс для своего контекста. Это не требуется, но это помогает изолировать ваш код от сгенерированного кода.
Под xxxModel.edmx в решении должно быть 4 отдельных файла. Откройте ту, которая заканчивается на .tt. Это шаблон.
В шаблоне добавьте вызов метода после кода шаблона, чтобы создать конструктор. Код шаблона должен выглядеть примерно так:
<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
// Put your method call here
MyConstructor();
Теперь в вашем частичном классе (или шаблона, если вы не используете разделяемые классы), определяют метод и добавить код из Mystere Man.
protected void MyConstructor()
{
((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += this.ObjectContext_OnObjectMaterialized;
}
Тогда вы просто добавить метод к огню:
public void ObjectContext_OnObjectMaterialized(Object sender, ObjectMaterializedEventArgs e)
{
if (e.Entity is IMyEntityClass) .....
или что вы хотите, чтобы произошло, когда объект materialzed. В моем случае, я просто проверить, если объект является типом, который держит уплотненное поле и, если да, то вызовите код распаковать его (который находится в частичном классе сущности.)
Наслаждайтесь
Что вы пытаетесь сделать точно? Возможно, есть лучший способ сделать то, что вы хотите? Вы пытаетесь инициализировать объекты? –
У меня есть «упакованное поле», которое мне нужно распаковать. Я не контролирую базу данных или структуры. С EF5 я должен материализовать объект, а затем вызвать метод распаковки. Alt должен добавить чек, чтобы все распаковывалось, если это необходимо, но это много повторяющегося кода. – JustMeToo
Вы всегда можете использовать адаптер контекста объекта. Что-то вроде этого '((IObjectContextAdapter) this) .ObjectContext.ObjectMaterialized + = this.ObjectContext_OnObjectMaterialized;' –