#c# #asp.net-mvc #entity-framework #ef-database-first
#c# #asp.net-mvc #entity-framework #ef-database-first
Вопрос:
У меня есть база DbContext
данных, и я добавил в класс некоторый код, связанный с аудитом DbContext
, но когда я обновляю модель, она удаляет написанный мной код в DbContext
классе. Пожалуйста, скажите мне, как сохранить этот код даже после обновления модели.
Вот мой код, и я добавил комментарии, которые код удаляет после обновления модели:
public partial class MyDbContext : DbContext
{
public MyDbContext()
: base("name=ODbContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<AspNotification> AspNotifications { get; set; }
public virtual DbSet<ASPAudit> ASPAudit { get; set; }
// this code is removed whenever I update model
public override int SaveChanges()
{
var addedEntries = ChangeTracker.Entries().Where(e => e.State == EntityState.Added).ToList();
int changes = base.SaveChanges();
foreach (var entry in addedEntries)
{
...some code
}
base.SaveChanges();
return changes;
}
}
Было бы здорово, если бы кто-нибудь помог мне
Комментарии:
1. Это частичный класс, который вы можете добавить к определению в другом исходном файле.
Ответ №1:
Если вы посмотрите на верхнюю часть этого сгенерированного класса, вы увидите:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
Это означает, что этот класс будет автоматически генерироваться при каждом обновлении.
Если сгенерированные классы есть partial
, вы можете создавать и добавлять свои расширения / изменения в другую половину partial
класса (например MyDbContextPartial.cs
).
// file MyDbContextPartial.cs
public partial class MyDbContext
{
public override int SaveChanges()
{
var addedEntries = ChangeTracker.Entries().Where(e => e.State == EntityState.Added).ToList();
int changes = base.SaveChanges();
foreach (var entry in addedEntries)
{
...some code
}
base.SaveChanges();
return changes;
}
}
Комментарии:
1. Могу ли я создать его с тем же именем класса, что и ‘MyDbContext’?
2. Как получить доступ к DbSet<Entity> в частичном классе.
3. @DeveloperDJ вы можете прочитать о частичных классах , они в основном представляют собой один класс, разделенный пополам (или много классов).