Exemple #1
0
 public static void Main()
 {
     var dbContext = new SocialNetworkDbContext();
     var importer = new XmlImporter(dbContext);
     var friendships = importer.ImportFriendshipFromXml("..\\..\\XmlFiles\\Friendships-Test.xml");
     friendships.ForEach(friendship => dbContext.Friendships.Add(friendship));
     dbContext.SaveChanges();
 }
        public static void FriendshipImport()
        {
            var serializer = new XmlSerializer(typeof(Friendships));
            string xmlFileName = ".\\XmlFiles\\Friendships-Test.xml";

            using (var fs = new FileStream(xmlFileName, FileMode.Open))
            {
                Friendships friendships = (Friendships)serializer.Deserialize(fs);

                List<Friendship> friendshipToAdd = new List<Friendship>();
                List<UserProfile> usersToAdd = new List<UserProfile>();
                List<Image> imagesToAddFirstUser = new List<Image>();
                List<Image> imagesToAddSecondUser = new List<Image>();

                using (var db = new SocialNetworkDbContext())
                {

                    var currentUsersnamesInDatabase = db.UserProfiles.Select(up => up.Username).ToList();

                    foreach (var friendship in friendships.Friendship)
                    {

                        if (!currentUsersnamesInDatabase.Contains(friendship.FirstUser.Username))
                        {
                            var firstUser = friendship.FirstUser;

                            usersToAdd.Add(new UserProfile
                            {
                                FirstName = firstUser.FirstName,
                                LastName = firstUser.LastName,
                                Username = firstUser.Username,
                                RegistrationDate = firstUser.RegisteredOn
                            });

                            foreach (var image in firstUser.Images)
                            {
                                imagesToAddFirstUser.Add(new Image {
                                    Url = image.ImageUrl,
                                    FileExtension = image.FileExtension
                                });
                            }
                        }

                        if (!currentUsersnamesInDatabase.Contains(friendship.SecondUser.Username))
                        {
                            var secondUser = friendship.SecondUser;

                            usersToAdd.Add(new UserProfile
                            {
                                FirstName = secondUser.FirstName,
                                LastName = secondUser.LastName,
                                Username = secondUser.Username,
                                RegistrationDate = secondUser.RegisteredOn
                            });

                            foreach (var image in secondUser.Images)
                            {
                                imagesToAddSecondUser.Add(new Image
                                {
                                    Url = image.ImageUrl,
                                    FileExtension = image.FileExtension,
                                });
                            }
                        }

                        if(usersToAdd.Count >0)
                        {
                            db.UserProfiles.AddRange(usersToAdd);
                            db.SaveChanges();
                        }

                        var allUsersInDatabase = db.UserProfiles.ToList();
                        currentUsersnamesInDatabase = allUsersInDatabase.Select(up => up.Username).ToList();
                        var firstUserFromDb = allUsersInDatabase.Single(u => u.Username == friendship.FirstUser.Username);
                        var secondUserFromDb = allUsersInDatabase.Single(u => u.Username == friendship.SecondUser.Username);

                        foreach (var image in imagesToAddFirstUser)
                        {
                            image.UserProfile = firstUserFromDb;
                        }

                        foreach (var image in imagesToAddSecondUser)
                        {
                            image.UserProfile = secondUserFromDb;
                        }

                        var usersFriendship = new SocialNetwork.Models.Friendship
                        {
                            Approved = (bool)friendship.Approved,
                            ApprovedOn = friendship.FriendsSince,
                            FirstUser = firstUserFromDb,
                            SecondUser = secondUserFromDb,
                        };

                        db.Images.AddRange(imagesToAddFirstUser);
                        db.Images.AddRange(imagesToAddSecondUser);
                        db.Friendships.AddOrUpdate(usersFriendship);
                    }

                    db.SaveChanges();
                }
            }
        }