/// <summary> /// Создание/Обновление объекта недвижимости /// </summary> /// <returns>bool</returns> public async Task <KeyValuePair <bool, string> > SaveObjects(RealtyObject obj) { var jsonString = JsonConvert.SerializeObject(obj); var jsonResponse = await SaveObjectsAsJson(jsonString); var data = JObject.Parse(jsonResponse); return(new KeyValuePair <bool, string>((bool)data["Result"], data["Message"].ToString())); }
/// <summary> /// Найти конкретный объект недвижимости. /// </summary> /// <param name="id">Id объекта недвижимости.</param> /// <returns>Найденный объект недвижимости.</returns> public override IRealtyObject Find(int id) { RealtyObject obj = this.Context.RealtyObjects.FirstOrDefault( ro => ro.RealtyObjectId == id); return(obj != null ? new RealtyObjectWrap(obj, this.Context) : null); }
/// <summary> /// Добавить относительные ссылки на фотографии объекта недвижимости. /// </summary> /// <param name="realtyObject">Объект недвижимости.</param> private void AddPhotos( RealtyObject realtyObject) { foreach (string source in this.GetRelativePhotoPaths()) { realtyObject.Photos.Add(new Photo() { RelativeSource = source }); } }
/// <summary> /// Прикрепить к контексту обновленный объект недвижимости. /// </summary> /// <param name="changedEntity">Интерфейс обновленного объекта /// недвижимости.</param> /// <returns>EF-объект недвижимости, прикрепленный к контексту.</returns> private RealtyObject AttachRealtyObject(IRealtyObject changedEntity) { RealtyObjectWrap wrap = new RealtyObjectWrap( changedEntity, this.Context); RealtyObject rObj = wrap.GetRealObject(); this.Context.RealtyObjects.Attach(rObj); this.Context.Entry(rObj).State = EntityState.Modified; return(rObj); }
/// <summary> /// Обновить данные существующего объекта недвижимости. /// </summary> /// <param name="changedEntity">Объект недвижимости с /// обновленными данными.</param> /// <returns>Обновленный объект недвижимости.</returns> public override IRealtyObject Update(IRealtyObject changedEntity) { if (!this.Context.RealtyObjects.Any(ro => ro.RealtyObjectId == changedEntity.RealtyObjectId)) { throw new InvalidOperationException( "Невозможно обновить данные объекта недвижимости. Объекта с id " + changedEntity.RealtyObjectId + " не существует."); } RealtyObject rObj = this.AttachRealtyObject(changedEntity); this.UpdateProperties(rObj); return(new RealtyObjectWrap(rObj, this.Context)); }
/// <summary> /// Получить объект недвижимости, включая все свойства /// и фотографии, для дальнейшего сохранения в БД. /// </summary> /// <returns>Объект недвижимости.</returns> public RealtyObject GetDbCompatibleFullObject() { RealtyObject ro = new RealtyObject { Date = this.Date.GetDateTime(), Cost = this.Price.GetIntegerPrice(), Note = this.Comments, AdditionalInfo = this.AdditionalInfo, RealtyObjectType = this.GetRealtyObjectDBType() }; foreach (PropertyValue value in this.CreateSpecificProperties()) { ro.PropertyValues.Add(value); } this.AddPhotos(ro); return(ro); }
/// <summary> /// Обновить все свойства в контексте EF. /// </summary> /// <param name="rObj">Обновленный EF-объект недвижимости.</param> private void UpdateProperties(RealtyObject rObj) { int[] newPropTypeIds = rObj.PropertyValues.Select(pv => pv.PropertyTypeId) .ToArray(); int id = rObj.RealtyObjectId; List <PropertyValue> oldProps = this.Context.PropertyValues .Where(pv => pv.RealtyObjectId == id) .ToList(); List <PropertyValue> removedProps = oldProps .Where(pv => !newPropTypeIds.Contains(pv.PropertyTypeId)) .ToList(); foreach (PropertyValue oldProp in removedProps) { this.Context.PropertyValues.Remove(oldProp); } this.UpdatePropertyStates(rObj.PropertyValues, oldProps); }
/// <summary> /// Создать несколько тестовых объектов в БД. /// </summary> public void CreateFewObjects() { // фирмы и агенты Firm newFirm = this.context.Firms.Add(new Firm() { Name = "Фирма \"У Васи\"", Address = "Улица Мира 52", Phone = "11-22-33fdsf" }); Agent vasya = this.context.Agents.Add(new Agent() { Firm = newFirm, Name = "Вася", IsFirmAdmin = true, Addres = "Ленина 25", LastName = "Пупкин", PhoneNumber = "33 - 33-3(0)" }); Password vasyaPassword = new Password() { Login = "******", Password1 = "12345v" }; vasya.Passwords.Add(vasyaPassword); Agent petya = this.context.Agents.Add(new Agent() { Firm = newFirm, Name = "Петя", IsFirmAdmin = false, Addres = "Карла Маркса 25", LastName = "Сидоров", PhoneNumber = "2222-22" }); Password petyaPassword = new Password() { Login = "******", Password1 = "12345p" }; petya.Passwords.Add(petyaPassword); // квартиры RealtyObject vasyasAppartment1 = this.context.RealtyObjects.Add(new RealtyObject() { RealtyObjectType = this.context.RealtyObjectTypes .First(type => type.TypeName == "Квартиры"), Agent = vasya, Cost = 1000, Date = new DateTime(2016, 5, 6, 0, 0, 0, DateTimeKind.Local).ToUniversalTime(), AdditionalInfo = "Хорошая квартира" }); new List <PropertyValue>(new[] { new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Улица"), StringValue = "Ленина" }, new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Дом"), StringValue = "11" }, }) .ForEach(value => vasyasAppartment1.PropertyValues.Add(value)); RealtyObject vasyasAppartment2 = this.context.RealtyObjects.Add(new RealtyObject() { RealtyObjectType = this.context.RealtyObjectTypes .FirstOrDefault(type => type.TypeName == "Квартиры"), Agent = vasya, Cost = 1100, Date = new DateTime(2016, 5, 16, 0, 0, 0, DateTimeKind.Local).ToUniversalTime(), AdditionalInfo = "Хорошая еще одна квартира" }); new List <PropertyValue>(new[] { new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Улица"), StringValue = "Ленина" }, new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Дом"), StringValue = "11" } }) .ForEach(value => vasyasAppartment2.PropertyValues.Add(value)); RealtyObject petyasAppartment1 = this.context.RealtyObjects.Add(new RealtyObject() { RealtyObjectType = this.context.RealtyObjectTypes .FirstOrDefault(type => type.TypeName == "Квартиры"), Agent = petya, Cost = 2000, Date = new DateTime(2015, 5, 6, 0, 0, 0, DateTimeKind.Local).ToUniversalTime(), AdditionalInfo = "Так себе квартира", Note = "Кот остается" }); new List <PropertyValue>(new[] { new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Улица"), StringValue = "English Street" }, new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Дом"), StringValue = "111" } }) .ForEach(value => petyasAppartment1.PropertyValues.Add(value)); RealtyObject petyasAppartment2 = this.context.RealtyObjects.Add(new RealtyObject() { RealtyObjectType = this.context.RealtyObjectTypes .FirstOrDefault(type => type.TypeName == "Квартиры"), Agent = petya, Cost = 3000, Date = new DateTime(2017, 5, 6, 0, 0, 0, DateTimeKind.Local).ToUniversalTime(), AdditionalInfo = "Уже лучше квартира", Note = "Мебель остается, балкон, ж/д" }); new List <PropertyValue>(new[] { new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Улица"), StringValue = "Московский проспект" }, new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Дом"), StringValue = "99" } }) .ForEach(value => petyasAppartment2.PropertyValues.Add(value)); RealtyObject petyasAppartment3 = this.context.RealtyObjects.Add(new RealtyObject() { RealtyObjectType = this.context.RealtyObjectTypes .FirstOrDefault(type => type.TypeName == "Квартиры"), Agent = petya, Cost = 3500, Date = new DateTime(2015, 5, 6, 0, 0, 0, DateTimeKind.Local).ToUniversalTime(), AdditionalInfo = "Балкон, ж/д, пласт.окна", Note = "Вообще всё норм" }); new List <PropertyValue>(new[] { new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Улица"), StringValue = "Московский проспект" }, new PropertyValue() { PropertyType = this.context.PropertyTypes.First(prType => prType.PropertyName == "Дом"), StringValue = "99" } }) .ForEach(value => petyasAppartment3.PropertyValues.Add(value)); }