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 Main() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<SocialNetworkDbContext, Configuration>()); var db = new SocialNetworkDbContext(); db.UserProfiles.Count(); }
public static void Main() { Database.SetInitializer(new MigrateDatabaseToLatestVersion<SocialNetworkDbContext, Configuration>()); using (var db = new SocialNetworkDbContext()) { Importer.ImportXML(); } }
public SocialNetworkService() { this.data = new SocialNetworkDbContext(); }
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(); } }
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(); } }
public XmlImporter() { this.data = new SocialNetworkDbContext(); }
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(); } } }