2013-07-30 6 views
0

Я использую Asp.net Mvc, Entity Frameowrk для моего проекта. Мой контекст класс:проблема с данными семенника сущности

public class SiteContext : DbContext, IDisposable 
{ 
    public SiteContext() : base("name=SiteContext") { } 

    public DbSet<SystemUsers> SystemUsers { get; set; } 
    public DbSet<UserRoles> UserRoles { get; set; } 
    public DbSet<Person> Person { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SiteContext>()); 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<SiteContext, Configration>()); 
    } 
} 

Мой класс конфигурации для миграции является:

public class Configration : DbMigrationsConfiguration<SiteContext> 
{ 
    public Configration() 
    { 
     AutomaticMigrationsEnabled = true; // also I changed this to false 
     AutomaticMigrationDataLossAllowed = true; //also I changed this to false 
    } 

protected override void Seed(SiteContext context) 
{ 

    new List<Person> 
      { 
      new Person {Id=1, Name="admin",SurName="admin",Email="[email protected]",IdentityNumber="12345678900"}, 
      }.ForEach(a => context.Person.AddOrUpdate(a)); 

     context.SaveChanges(); 
    } 
} 

Я использую команду AddorUpdate для миграции. Проблема в семенной части. Он не добавляет запись Person один раз. Он добавляет запись Person каждый раз. Как я могу решить эту проблему?

+0

Есть ли 'Person' с Id = 1 в базе данных до' работает Seed'? –

ответ

1

Попробуйте это:

context.Person.AddOrUpdate(p => new {p.Id}, <yourpersonobject>); 
context.SaveChanges(); 

Так оно может принять Id как уникальный идентификатор ключа.

Или в вашем случае:

new List<Person> 
     { 
     new Person {Id=1, Name="admin",SurName="admin",Email="[email protected]",IdentityNumber="12345678900"}, 
     }.ForEach(a => context.Person.AddOrUpdate(p => new {p.Id}, a)); 

Должно работать

+0

Спасибо. оно работает. – miyamotomusashi

+0

Отлично !, рад слышать, что –