私は5つのエンティティを持っています:
public class Album
{
public int Id { get; set; }
public string Title { get; set; }
public virtual List<AlbumArtist> AlbumArtists { get; set; }
public virtual List<Artist> Artists { get; set; }
public virtual List<Genre> Genres { get; set; }
public virtual List<Song> Songs { get; set; }
}
public class AlbumArtist
{
public int Id { get; set; }
public string Title { get; set; }
public virtual List<Album> Albums { get; set; }
public virtual List<Artist> Artists { get; set; }
public virtual List<Genre> Genres { get; set; }
public virtual List<Song> Songs { get; set; }
}
public class Artist
{
public int Id { get; set; }
public string Title { get; set; }
public virtual List<AlbumArtist> AlbumArtists { get; set; }
public virtual List<Album> Albums { get; set; }
public virtual List<Genre> Genres { get; set; }
public virtual List<Song> Songs { get; set; }
}
public class Genre
{
public int Id { get; set; }
public string Title { get; set; }
public virtual List<AlbumArtist> AlbumArtists { get; set; }
public virtual List<Album> Albums { get; set; }
public virtual List<Artist> Artists { get; set; }
public virtual List<Song> Songs { get; set; }
}
public class Song
{
public int Id { get; set; }
public string Title { get; set; }
public virtual List<AlbumArtist> AlbumArtists { get; set; }
public virtual List<Album> Albums { get; set; }
public virtual List<Artist> Artists { get; set; }
public virtual List<Genre> Genres { get; set; }
}
ご覧のとおり、多対多の関係がたくさんあります。エンティティにデータを入力し、その方法で DbContext に保存しようとします。
_albumArtists.ForEach(delegate(AlbumArtist albumArtist)
{
if (albumArtist.Id == 0)
{
_dbContext.Entry(entity).State = EntityState.Added;
_dbContext.SaveChanges();
}
else
{
_dbContext.Entry(entity).State = EntityState.Modified;
_dbContext.SaveChanges();
}
});
...
またはその方法で:
_albumArtists.ForEach(delegate(AlbumArtist albumArtist)
{
if (albumArtist.Id == 0)
{
_dbContext.Entry(entity).State = EntityState.Added;
}
else
{
_dbContext.AlbumArtists.State = EntityState.Modified;
}
});
_dbContext.SaveChanges();
...
エンティティを DbContext に保存するのに時間がかかります。私も次のことをしようとしました:
Configuration.AutoDetectChangesEnabled = false;
しかし、それは役に立ちませんでした。ちなみに、約17,000曲、1,700枚のアルバムがあります。
なにが問題ですか???
助けてください!
PS
ここに私の完全なコードがあります: https://github.com/vjacheslavravdin/PsyTrance/blob/master/PsyTrance/Program.cs おそらく、それを単純化する方法を提案できます。
ありがとう!