Ho avuto problemi con questo problema da 4.1 (ora sono su 4.3). Mi sembra che per ottenere il metodo di seme chiamato, tutto quello che ho dovuto fare è la seguente:metodo seed non chiamato con EntityFramework CodeFirst
1) Creare un catalogo di dati vuota su SQLServer 2) Eseguire il codice qui sotto:
Database.SetInitializer(new DropCreateDatabaseAlways<SiteDB>());
ho il mio SiteDB definito come segue:
public class SiteDBInitializer :
DropCreateDatabaseAlways<SiteDB>
{
protected override void Seed(SiteDB db)
{
... (break point set here that never gets hit)
mi sento come devo mancare qualcosa di molto semplice, perché questo crea le mie tabelle, ma non mai chiama il metodo seme.
Per rendere questo più chiaro, ecco un esempio completo che include tutto il codice. Quando l'eseguo, seme non viene mai chiamato:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace ConApp
{
internal class Program
{
private static void Main(string[] args)
{
Database.SetInitializer(new SiteDBInitializer());
using (var db = new SiteDB())
{
var x = db.Customers;
}
}
}
public class SiteDB : DbContext
{
public DbSet<Customer> Customers { get; set; }
}
public class Customer
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public string LastName { get; set; }
}
public class SiteDBInitializer :
DropCreateDatabaseAlways<SiteDB>
{
protected override void Seed(SiteDB db)
{
db.Customers.Add(new Customer() {LastName = "Kellner"});
db.Customers.Add(new Customer() {LastName = "Jones"});
db.Customers.Add(new Customer() {LastName = "Smith"});
db.SaveChanges();
}
}
}
Suppongo che vogliate: Database.SetInitializer (nuovo SiteDBInitializer()); L'ho provato e non ha funzionato neanche. –
@PeterKellner Viene chiamato quando si fa qualcosa (es. Query) per la prima volta. Hai provato a eseguire una query? – Eranga
Ciao Eranga e J.W. Ho aggiornato la mia domanda per includere un'app banale della console che ritengo debba essere chiamata seed e non lo è. Se tu potessi dare un'occhiata (e anche incollarlo ed eseguirlo), lo apprezzerei molto. Sono sicuro che ci sia qualcosa di semplice che mi sfugge ma che sta facendo impazzire da mesi. –