Странна грешка с миграциите във Entity Framework


1

Здравейте. Първо да отбележа, че не за 1 път използвам Code First подхода и миграциите и съм горе-долу наясно с нещата. Досега не съм имал проблем като следния(струва ми се доста странен) : ъпдейтването(миграцията) на базата работи без проблем, когато го правя през Package Manager конзолата и използвам командите, но ако пробвам автоматично със Database.SetInitializer(new Migration()) хвърля NullReferenceException.
Ето го DbContext класа + ентитито : http://pastebin.com/zTXtbGXn

Ето го Configuration класа : http://pastebin.com/se2wtmVb

 За съжаление автоматичния начин Database.SetInitializer<DBContext>(new MigrateDatabaseToLatestVersion<DBContext, Configuration>());

не работи и нямам идея защо. Дава ми NullReferenceError на Car таблицата, веднага като стартирам приложението, защото приложението ползва тази таблица. Много странен бъг, имате ли идеи защо не работи по автоматичния начин - не искам всеки път да пиша update-database в конзолата.

П.П DBContext е моят context - по-късно ще сменя името да не стане объркване със DbContext




Отговори



0
Най-добре дай целия Solution, най-бързо ще стане.

от plamen.yovchev (3283 точки)


0

public DbSet<Car> Cars{ get; set; }

Трябва да ти е виртуален и ти препоръчвам да ползвай IDbSet

public virtual IDbSet<Car> Cars{ get; set; }

 


от Teodor92 (13062 точки)


0
"Трябва" е силна дума. Аз не ги пиша нито виртуални нито IDbSet и не съм имал проблем.
Най-ветоятно в твоя случай ползваш репозитори, но няма общо с неговия.

от saykor (8845 точки)

0
Всъщност имах подобен проблем, когато не ползвах репо и точно с това го оправих. :)

от Teodor92 (13062 точки)



0

Я пусни точно грешката дето ти дава. Имам чувството, че тоя NullReferenceError на Car таблицата e по-скоро, че нямаш кей. Ползваш Guid за Id-то и може да не го разбира като кей: http://stackoverflow.com/questions/5270721/using-guid-as-pk-with-ef4-code-first

За Seed метода напиши:

if (!context.Cars.Any())

 {

      Car car = new Car { Id = Guid.NewGuid(), HorsePower = 90 };          context.Cars.Add(c => c.Id, car);

context.SaveChanges();

}

 

Така няма да ти го пише всеки път. А и без SaveChanges май изобщо не го записваш в базата а го държиш като обект в context-a.


от saykor (8845 точки)


0
Това: ContextKey = "WebApp.Database.DBContext"; Не съм го ползвал никога. Не ми се рови в нета сега, защо си го сложил.

от saykor (8845 точки)

0
Благодаря за всички отговори. В момента нямам достъп до компютър,но се сещам, че грешката беше следната: Value cannot be null, parameter name source. Имам данни в базата и не знам защо ми гърми с тази грешка. ContextKey ми го генерира автоматично като enable-на миграциите - то всъщност взима просто неймспейса на моя context.

от Hachiko (380 точки)