Próbuję użyć wzoru pierwszego kodu EF 4. Mój kod inicjalizacji jest następujący:Kod EF 4 Najpierw: Kompatybilność modelu nie może być sprawdzona, ponieważ typ EdmMetadata nie był zawarty w modelu
Tworzenie modelu Builder:
private static DbModelBuilder CreateModelBuild()
{
var builder = new DbModelBuilder();
//add entity classes about 12 of them
builder.Conventions.Remove<IncludeMetadataConvention>();
return builder;
}
Tworzenie sesji:
private bool BuildSqlServerSession(DbModelBuilder builder)
{
var model =
builder.Build(new SqlConnection(@"connection string"));
var cm = model.Compile();
var context = new LittlePOSContext(cm);
var dbExists = context.Database.Exists();
_session = new EFSession(context);
return dbExists;
}
Działa to po uruchomieniu kodu po raz pierwszy. Ale kiedy działa na drugi raz i próbuje dodać obiekt przy context.Add(myEntity)
otrzymuję następujący wyjątek:
Model compatibility cannot be checked because the EdmMetadata type was not
included in the model. Ensure that IncludeMetadataConvention has been added
to the DbModelBuilder conventions.
Próbowałem usuwając następujący wiersz:
builder.Conventions.Remove<IncludeMetadataConvention>();
ale nadal pojawia się błąd.
Jest kompatybilny.Problem polega na tym, że za pierwszym razem, gdy go tworzysz, nie ma tabeli do śledzenia zmian modelu, dlatego też narzeka. Po utworzeniu bazy danych przez EF po raz pierwszy, można zmienić strategię inicjalizacji z powrotem na to, czym była. –