コード例 #1
0
ファイル: Startup.cs プロジェクト: TelerikAcademy/Databases
 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();
 }
コード例 #2
0
        public static void Main()
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<SocialNetworkDbContext, Configuration>());

            var db = new SocialNetworkDbContext();

            db.UserProfiles.Count();
        }
コード例 #3
0
ファイル: Startup.cs プロジェクト: hackohackob/TelerikAcademy
        public static void Main()
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<SocialNetworkDbContext, Configuration>());

            using (var db = new SocialNetworkDbContext())
            {
                Importer.ImportXML();
            }
        }
コード例 #4
0
 public SocialNetworkService()
 {
     this.data = new SocialNetworkDbContext();
 }
コード例 #5
0
        private void FriendshipImport()
        {
            var document = new XmlDocument();
            document.Load(FriendshipPath);

            var root = document.DocumentElement;

            if (root != null)
            {
                var recordIndex = 0;
                foreach (XmlNode node in root.ChildNodes)
                {
                    // relationship true/false
                    bool relationType = bool.Parse(node.Attributes["Approved"].InnerText);
                    DateTime friendsSince = DateTime.Now;

                    if (relationType)
                    {
                        friendsSince = DateTime.Parse(node.FirstChild.InnerText);
                    }


                    var friendship = new Friendship();

                    // only for approved friendships
                    if (relationType)
                    {
                        friendship.Approved = true;
                        friendship.ApproveDate = friendsSince;
                    }
                    else
                    {
                        friendship.Approved = false;
                    }

                    // I know it's bad practise, but no time for refactoring
                    #region FIRST USER
                    int firstId;

                    var firstUser = this.GetUserFromNode(
                        node.SelectSingleNode("FirstUser/Username"),
                        node.SelectSingleNode("FirstUser/FirstName"),
                        node.SelectSingleNode("FirstUser/LastName"),
                        node.SelectSingleNode("FirstUser/RegisteredOn"));

                    var firstImages = this.GetImagesFromNode(node.SelectNodes("FirstUser/Images/Image"));

                    if (this.data.Users.Any(x => x.UserName == firstUser.UserName))
                    {
                        // update user info and images
                        var user = this.data
                            .Users
                            .First(x => x.UserName == firstUser.UserName);

                        user.FirstName = firstUser.FirstName;
                        user.LastName = firstUser.LastName;
                        user.RegistrationDate = firstUser.RegistrationDate;

                        if (firstImages.Count > 0)
                        {
                            foreach (var firstImage in firstImages)
                            {
                                user.Images.Add(firstImage);
                            }
                        }

                        this.data.Users.AddOrUpdate(user);
                        this.data.SaveChanges();
                        this.data = new SocialNetworkDbContext();

                        firstId = user.Id;
                    }
                    else
                    {
                        // add user and get id

                        if (firstImages.Count > 0)
                        {
                            foreach (var firstImage in firstImages)
                            {
                                firstUser.Images.Add(firstImage);
                            }
                        }

                        this.data.Users.AddOrUpdate(firstUser);
                        this.data.SaveChanges();

                        firstId = this.data.Users.First(x => x.UserName == firstUser.UserName).Id;

                        this.data = new SocialNetworkDbContext();
                    }
                    #endregion

                    // I know it's bad practise, but no time for refactoring
                    #region SECOND USER
                    int secondId;

                    var secondUser = this.GetUserFromNode(
                        node.SelectSingleNode("SecondUser/Username"),
                        node.SelectSingleNode("SecondUser/FirstName"),
                        node.SelectSingleNode("SecondUser/LastName"),
                        node.SelectSingleNode("SecondUser/RegisteredOn"));

                    var secondImages = this.GetImagesFromNode(node.SelectNodes("SecondUser/Images/Image"));

                    if (this.data.Users.Any(x => x.UserName == secondUser.UserName))
                    {
                        // update user info and images
                        var user = this.data
                            .Users
                            .First(x => x.UserName == secondUser.UserName);

                        user.FirstName = secondUser.FirstName;
                        user.LastName = secondUser.LastName;
                        user.RegistrationDate = secondUser.RegistrationDate;

                        if (secondImages.Count > 0)
                        {
                            foreach (var secondImage in secondImages)
                            {
                                user.Images.Add(secondImage);
                            }
                        }

                        this.data.Users.AddOrUpdate(user);
                        this.data.SaveChanges();
                        this.data = new SocialNetworkDbContext();

                        secondId = user.Id;
                    }
                    else
                    {
                        // add user and get id

                        if (secondImages.Count > 0)
                        {
                            foreach (var secondImage in secondImages)
                            {
                                secondUser.Images.Add(secondImage);
                            }
                        }

                        this.data.Users.AddOrUpdate(secondUser);
                        this.data.SaveChanges();

                        secondId = this.data.Users.First(x => x.UserName == secondUser.UserName).Id;

                        this.data = new SocialNetworkDbContext();
                    }
                    #endregion

                    // MESSAGES
                    var messages = this.GetMessages(node.SelectNodes("Messages/Message"));

                    friendship.FirstUserId = firstId;
                    friendship.SecondUserId = secondId;

                    if (messages.Count > 0)
                    {
                        friendship.Messages = messages;
                    }

                    this.data.Friendships.Add(friendship);

                    if (recordIndex%10==0)
                    {
                        Console.Write(".");
                    }

                    if (recordIndex % 50 == 0)
                    {
                        this.data.SaveChanges();
                        this.data.Dispose();
                        this.data = new SocialNetworkDbContext();
                    }
                    
                    recordIndex++;
                }

                this.data.SaveChanges();
            }
        }
コード例 #6
0
        private void PostsImport()
        {
            var document = new XmlDocument();
            document.Load(PostsPath);

            var root = document.DocumentElement;

            if (root != null)
            {
                var recordsIndex = 0;

                foreach (XmlNode node in root.ChildNodes)
                {
                    var post = new Post
                    {
                        Content = node.SelectSingleNode("Content").InnerText,
                        PostingDate = DateTime.Parse(node.SelectSingleNode("PostedOn").InnerText)
                    };

                    var users = node.SelectSingleNode("Users").InnerText.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                    var postUsers = users.Select(user => this.data.Users.First(x => x.UserName == user)).ToList();

                    if (postUsers.Count > 0)
                    {
                        foreach (var usr in postUsers)
                        {
                            post.Users.Add(usr);
                        }
                    }

                    Console.Write(".");

                    this.data.Posts.Add(post);

                    if (recordsIndex % 100 == 0)
                    {
                        this.data.SaveChanges();
                        this.data.Dispose();
                        this.data = new SocialNetworkDbContext();
                    }

                    recordsIndex++;
                }

                this.data.SaveChanges();
            }
        }
コード例 #7
0
 public XmlImporter()
 {
     this.data = new SocialNetworkDbContext();
 }
コード例 #8
0
        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();
                }
            }
        }