使用Entity Framework进行数据库迁移

时间:2012-11-15 14:33:35

标签: asp.net-mvc-3 sql-server-2008 c#-4.0 entity-framework-4.3

我在数据库(SQL Server 2008)中有奇怪的结果 - 。

我使用Entity Framework处理ASP.NET MVC 3项目,并使用数据库迁移。

当我修改数据库的模式和配置文件(Configuration.cs)种子方法时,我有以下代码在迁移后初始化数据:

protected override void Seed(YAnnonce.Core.Repository.AnnonceDbContext context)
{
   var categorieAnnonces = new List<CategorieAnnonce> 
       {
          new CategorieAnnonce{ CategorieAnnonceID = 1, CategorieName="Emploi"},
          new CategorieAnnonce{ CategorieAnnonceID = 2, CategorieName="Stage"},                        
       };

   categorieAnnonces.ForEach(a => context.CategorieAnnonces.AddOrUpdate(a));
   context.Annonces.AddOrUpdate(new Annonce[10]{
            new Annonce {AnnonceID=250, titre = "Offre d'emploi", CategorieAnnonce = categorieAnnonces[0], description="le cabinet de recrutement le pole offre à toute pe",date=DateTime.Now,etat=1, mode = 0, EndDate = DateTime.Now},
            new Annonce {AnnonceID=490, titre = "Formation", CategorieAnnonce = categorieAnnonces[1], description="Le cabinet de recrutement et de formation maroc ",date=DateTime.Now,etat=0, mode = 1, EndDate = DateTime.Now},
            new Annonce {AnnonceID=380,titre = "Freelance", CategorieAnnonce =categorieAnnonces[1], description="Bonjour, jeune développeur en informatique vous assurant ",date=DateTime.Now, etat=1, mode = 1, EndDate = DateTime.Now});
}

但问题是在迁移之后会将相同的数据添加到数据库中,我不希望出现这种情况。

2 个答案:

答案 0 :(得分:1)

您必须确定应该使用哪种状态的数据库迁移。有不同的方法可以执行此操作,我建议使用其中一种方法。写一个这样的类,并将Seed函数放入其中:

public class DataContextInitializer:DropCreateDatabaseIfModelChanges<YAnnonce.Core.Repository.AnnonceDbContext>
{
    var categorieAnnonces = new List<CategorieAnnonce> 
       {
          new CategorieAnnonce{ CategorieAnnonceID = 1, CategorieName="Emploi"},
          new CategorieAnnonce{ CategorieAnnonceID = 2, CategorieName="Stage"},                        
       };

   categorieAnnonces.ForEach(a => context.CategorieAnnonces.AddOrUpdate(a));
   context.Annonces.AddOrUpdate(new Annonce[10]{
            new Annonce {AnnonceID=250, titre = "Offre d'emploi", CategorieAnnonce = categorieAnnonces[0], description="le cabinet de recrutement le pole offre à toute pe",date=DateTime.Now,etat=1, mode = 0, EndDate = DateTime.Now},
            new Annonce {AnnonceID=490, titre = "Formation", CategorieAnnonce = categorieAnnonces[1], description="Le cabinet de recrutement et de formation maroc ",date=DateTime.Now,etat=0, mode = 1, EndDate = DateTime.Now},
            new Annonce {AnnonceID=380,titre = "Freelance", CategorieAnnonce =categorieAnnonces[1], description="Bonjour, jeune développeur en informatique vous assurant ",date=DateTime.Now, etat=1, mode = 1, EndDate = DateTime.Now});
}

然后在你的main / root web.config文件中,添加以下键以在应用程序运行期间运行上面的类:

<appSettings>
    <add key="DatabaseInitializerForType YAnnonce.Core.Repository.AnnonceDbContext, [Project_Name]" value="DataContextInitializer, [Project_Name]" />
</appSettings>

答案 1 :(得分:0)

在插入之前检查记录是否存在。 如果您考虑将数据插入单个事务中,则可以在插入之前搜索是否存在任何一个记录。 即

if(!context.Annonces.Any(x=>x.AnnonceID==250)){ //insert records here }