2016-03-23 2 views
2
erstellt wurde

Ich erhalte die folgende Fehlermeldung, wenn ich meine Einheit Test laufen (Das Modell der ‚mycontext‘ Kontext Sicherung geändert hat, da die Datenbank erstellt wurde)Das Modell der ‚mycontext‘ Kontext Sicherung geändert hat, da die Datenbank

In meinem Kontext Konstruktor ich habe den Test

Database.SetInitializer<MyContext>(null); 

In meinem Referat habe ich den Zusammenhang bin spöttisch. Ich habe diesen Code auch dem Komponententest hinzugefügt und es schlägt immer noch fehl. Gibt es noch etwas, die auseinander getan werden muss, um von der Database.SetInitializer<MyContext>(null);

Mein Kontext ist hier

public class MyContext : DbContext 
    { 
    public MyContext() : base("MyContext") 
    { 
     Database.SetInitializer<MyContext>(null); 
    } 

    public virtual DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().ToTable("Users"); 
    } 
    } 

Mein Mock in der Unit-Test

var _context = new Mock<MyContext>(); 
    Database.SetInitializer<MyContext>(null); 
    _classUnderTest = new Repo(_context.Object); 

ich den Fehler hier

_context.Entry(user).State = EntityState.Added; 
+0

Ihr Mock-Modell spiegelt nicht den Status der Datenbank wider. Überprüfen Sie, ob Mock tatsächlich genau zum realen DB-Modell passt. –

Antwort

1

ich bin nicht sicher, ob ich die Frage verstanden, aber wenn Sie Entity Framework verwenden Code First approach, Nach Modelländerung Versuchen Sie, die Migrationen in Ihrer Anwendung zu aktivieren. Es kann mit der Paket-Manager-Konsole durchgeführt werden ..

Siehe diesen Link für weitere Informationen. MSDN link

+0

Hallo Ich möchte nicht Migrations das ist, warum ich Einstellung bin Database.SetInitializer (null); Aber ich bekomme immer noch den Migrationsfehler – MicroMan

0

Es stellt sich heraus, dass EF unter der Haube, wenn keine Verbindungszeichenfolge vorgesehen ist, wird eine Verbindung mit SQL Express Standard. Der Weg, dies zu lösen, besteht also nicht darin, den Kontext zu verfälschen, sondern eine Schnittstelle aus dem Kontext zu extrahieren und sich darüber lustig zu machen. Stellt sich heraus, das Beispiel auf MSDN ist ziemlich arm, wie sie den tatsächlichen Kontext und nicht eine Abstraktion verspotten.

https://msdn.microsoft.com/en-us/library/dn314429.aspx?f=255&MSPPError=-2147217396

Verwandte Themen