Ich arbeite an einer ASP.NET MVC Web App mit individueller Authentifizierung, um Details über Benutzerautos zu speichern. Ich werde die Web-App testen müssen, indem ich das Entityframework verspotze, also habe ich gelesen, dass ich eine Schnittstelle für die Klasse ApplicationDbContext
implementieren muss.Wie man Entity Framework mit IdentityDbContext mockt?
Dies ist mein erster Versuch, Entity Framework zu verwenden, und ich wollte nur überprüfen, ob meine ApplicationDbContext
Klasse und Schnittstelle geeignet sein wird, das Framework beim Komponententest zu verspotten?
public interface IApplicationDbContext : IDisposable
{
IDbSet<ApplicationUser> Users { get; set; }
DbSet<CarModel> Cars { get; set; }
int SaveChanges();
void MarkAsModified(CarModel car);
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IApplicationDbContext
{
public ApplicationDbContext()
: base("ApplicationDb", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet<CarModel> Cars { get; set; }
public override IDbSet<ApplicationUser> Users { get; set; }
public void MarkAsModified(CarModel car)
{
Entry(car).State = EntityState.Modified;
}
}
Einige der Klassen wurden durch Autokorrektur mit Visual Studios "Quick Actions" erstellt. Könnte jemand erklären, warum die ApplicationUser
Modelle erfordern IDbSet
, aber die CarModels
erfordern nur DbSet
, und warum die Users
in der Klasse ApplicationDbContext
erfordern eine Überschreibung?
Ihre DbContext-Eigenschaften sollten wahrscheinlich öffentlich virtuell sein, wenn Sie sich über sie lustig machen. – CalC