我在数据库(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});
}
但问题是在迁移之后会将相同的数据添加到数据库中,我不希望出现这种情况。
答案 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 }