Как создать частичные классы из CodeFirst

Я работаю с приложением, использующим EF, в подходе, основанном на коде, поэтому существует несколько доменных классов.

Мне нужно получить доступ к ObjectContext.SavingChanges, чтобы я мог работать с несколькими недавно добавленными бизнес-правилами. Из того, что я видел здесь, на SO и в книга Джули Лерман Мне нужно создать частичный класс с тем же именем, что и сгенерированные частичные классы, сгенерированные EF.

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

Вопросы

1. Где я могу найти эти сгенерированные классы EF?

2. Какой из найденных классов использовать в качестве частичного класса, если мне нужно получить доступ к ObjectState.SavingChanges?


person Slinky    schedule 20.05.2014    source источник
comment
Сначала в коде, какие классы вы ожидаете создать? В наших проектах EF Code First мы сами создаем эти классы и разрешаем миграцию для обновления БД при изменении модели.   -  person clarkitect    schedule 20.05.2014
comment
1. Code First означает, что нет генерации классов. Это означает, что вы сами пишете классы сущностей. 2. Предполагая, что вы используете DbContext API, вы можете получить доступ к ObjectContext через ((IObjectContextAdapter)yourDbContext).ObjectContext. Вы можете сделать это везде, где у вас есть переменная yourDbContext, или внутри вашего типа, производного от DbContext. Для этого вам не нужны частичные классы. 3. Как вы думаете, почему вам нужно ObjectContext.SavingChanges для применения бизнес-логики? Похоже, ты что-то недопонимаешь.   -  person Dennis    schedule 20.05.2014
comment
@ Деннис Хорошие вопросы. Когда данные изменяются в некоторых классах сущностей, нам нужно иметь возможность обнаруживать это в одном месте, а затем обновлять поле даты и времени в другой таблице, поэтому я подумал, что для этого подойдет Object.SavingChanges. Я знаю, как переопределить SaveChanges(), но понятия не имею об ObjectContext.SavingChanges   -  person Slinky    schedule 20.05.2014
comment
@Dennis Нет, Code First - это немного неправильное название, потому что имя ПОДРАЗУМЕВАЕТ, что вы сначала создаете классы, но это не обязательно так. Вы можете создавать классы на основе существующей базы данных. Microsoft даже признала, что название вводит в заблуждение: blogs.msdn.com/b/adonet/archive/2014/10/21/   -  person BruceHill    schedule 16.07.2016


Ответы (1)


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

Но если вы хотите получить доступ к SavingChanges(), вам нужно создать свой собственный контекст класса, расширив ObjectContext, чтобы вы могли переопределить ObjectContext.SavingChanges(), чтобы добавить свой собственный бизнес-процесс.

надеюсь, это поможет вам.

person Perfect28    schedule 20.05.2014
comment
если вы хотите получить доступ к SavingChanges(), вам нужно создать свой собственный контекст класса, расширив ObjectContext — нет, вам это не нужно. Это публичное событие, и внешний код может легко на него подписаться. - person Dennis; 20.05.2014
comment
Извините, я имею в виду SaveChanges(), а не событие SavingChanges(), поскольку вы не можете отменить операцию сохранения в событии SavingChanges. - person Perfect28; 20.05.2014
comment
Это ответило на мой вопрос о частичных классах. Спасибо - person Slinky; 20.05.2014